Изпълнение на Django персонализирана задача manage.py на Heroku - проблеми с импортирането

Опитвам се да стартирам персонализирана команда 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 на Django, но не съм сигурен как да разреша проблема. Може ли някой да ме насочи в правилната посока? Има ли по-лесен начин да постигна това, което се опитвам да направя тук?

Благодаря ви много за вашите съвети и съвети предварително! Нов в Heroku! :)

РЕДАКТИРАНЕ:

Съгласно коментара на Nix, направих някои корекции и открих, че като посочих точния си път на 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)


Вероятно използвате различен преводач.

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


Въвеждането на which python ще ви каже какъв интерпретатор се намира на пътя ви.

person Nix    schedule 05.12.2011
comment
Еха. Прав си. Когато извикам heroku run bin/python bin/send_daily_email.py (срещу ```heroku run bin/send_daily_email.py). Ще преработя отговора си и ще покажа текущия си отговор, за да видя дали можете да помогнете:) Но бих казал на SO, че сте отговорили на въпроса. - person kturner; 05.12.2011

В допълнение, това също може да бъде решено чрез добавяне на вашата начална директория към вашия Python път. Бърз и ненатрапчив начин да постигнете това е да го добавите към променливата на средата на PYTHONPATH (която обикновено е /app в стека Heroku Cedar).

Добавете го чрез командата heroku config:

$ heroku config:add PYTHONPATH=/app

Това трябва да го направи! За повече подробности: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/

person Tomatohater    schedule 17.01.2012