Выполнение пользовательской задачи manage.py в Django на Heroku - проблемы с импортом - PullRequest
5 голосов
/ 05 декабря 2011

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

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

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 Джанго, но я не уверен, как решить проблему. Может ли кто-нибудь указать мне правильное направление? Есть ли более простой способ выполнить то, что я пытаюсь сделать здесь?

Большое спасибо за ваши советы и рекомендации заранее! Новое в Heroku! :)

EDIT:

Согласно комментарию Nix, я внес некоторые коррективы и обнаружил, что, указав мой точный путь к питону, я прошел установку 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```.

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

Ответы [ 2 ]

3 голосов
/ 05 декабря 2011

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

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


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

2 голосов
/ 17 января 2012

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

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

$ heroku config:add PYTHONPATH=/app

Это должно сделать это! Для более подробной информации: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/

...