Запуск пользовательской задачи Django manage.py на Heroku — проблемы с импортом

Я пытаюсь запустить пользовательскую команду django в качестве запланированной задачи на Heroku. Я могу выполнить пользовательскую команду локально через: python manage.py send_daily_email. (примечание: у меня НЕТ проблем с самой пользовательской командой управления)

Однако Heroku дает мне следующее исключение при попытке «запустить» задачу через надстройку планировщика Heroku:

Traceback (most recent call last):
  File "bin/send_daily_visit_email.py", line 2, in <module>
    from django.conf import settings
ImportError: No module named django.conf

Я поместил скрипт Python в /bin/send_daily_email.py, и он выглядит следующим образом:

#! /usr/bin/python
from django.conf import settings
settings.configure()
from django.core import management

management.call_command('send_daily_email') #delegates off to custom command

Однако в Heroku я могу запустить heroku run bin/python — запустить оболочку python — и успешно импортировать settings из django.conf

Я почти уверен, что это как-то связано с моим PYTHON_PATH или видимостью SETTINGS_MODULE Django, но я не знаю, как решить эту проблему. Может ли кто-нибудь указать мне в правильном направлении? Есть ли более простой способ выполнить то, что я пытаюсь сделать здесь?

Большое спасибо за ваши советы и советы заранее! Новое в Героку! :)

ИЗМЕНИТЬ:

Согласно комментарию Никса, я внес некоторые коррективы и обнаружил, что, указав свой точный путь к Python, я прошел настройку Django.

Теперь я получаю:

  File "/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 155, in call_command
    raise CommandError("Unknown command: %r" % name)
django.core.management.base.CommandError: Unknown command: 'send_daily_email'

Хотя я вижу send_daily_email, когда запускаю heroku run bin/python app/manage.py```.

Я буду держать обновление, если я найду ответ.


person kturner    schedule 05.12.2011    source источник


Ответы (2)


Вероятно, вы используете другой интерпретатор.

Убедитесь, что оболочка python совпадает с той, на которую вы ссылаетесь в своем скрипте /usr/bin/python . Возможно, в вашем пути есть другой, что объясняет, почему он работает, когда вы запускаете python manage.py, но не ваш сценарий оболочки, на который вы явно ссылаетесь /usr/bin/python.


Набрав which python, вы узнаете, какой интерпретатор находится на вашем пути.

person Nix    schedule 05.12.2011
comment
Ух ты. Ты прав. Когда я вызываю heroku run bin/python bin/send_daily_email.py (вместо ```heroku запускаю bin/send_daily_email.py). Я пересмотрю свой ответ и покажу свой текущий ответ, чтобы узнать, можете ли вы помочь :) Но я бы сказал ТАК, что вы ответили на вопрос. - person kturner; 05.12.2011

Кроме того, это также можно решить, добавив свой домашний каталог в путь к Python. Быстрый и ненавязчивый способ добиться этого — добавить его в переменную окружения PYTHONPATH (обычно это /app в стеке Heroku Cedar).

Добавьте его с помощью команды конфигурации heroku:

$ heroku config:add PYTHONPATH=/app

Это должно сделать это! Подробнее: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/

person Tomatohater    schedule 17.01.2012