2011-12-05 17 views
5

Próbuję uruchomić niestandardowe polecenie django jako zaplanowane zadanie na Heroku. Jestem w stanie wykonać polecenie niestandardowe lokalnie za pośrednictwem: python manage.py send_daily_email. (Uwaga: nie mają żadnych problemów z polecenia zarządzania na zlecenie samego)Uruchamianie niestandardowego zadania manage.py Django na Heroku - problemy z importowaniem

Jednak Heroku daje mi następujący wyjątek podczas próby „Uruchom” zadanie poprzez Heroku Harmonogram dodatek:

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 

I umieszczony skrypt Pythona w /bin/send_daily_email.py, a to z następujących powodów:

#! /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 

ciągu Heroku, jednak jestem w stanie uruchomić heroku run bin/python - uruchomić powłokę Pythona - i sukces pełni importować settings z django.conf

Jestem pewien, że ma to coś wspólnego z moim widoczności Django SETTINGS_MODULEPYTHON_PATH albo, ale jestem pewien, jak rozwiązać ten problem. Czy ktoś może wskazać mi właściwy kierunek? Czy istnieje łatwiejszy sposób na zrealizowanie tego, co próbuję tutaj zrobić?

Dziękuję bardzo za porady i porady z góry! Nowość w Heroku! :)

EDIT:

komentarz Per Nix jest, zrobiłem kilka zmian, a nie odkryć, że określając moją dokładną ścieżkę Python, zrobiłem ominąć konfiguracji Django.

teraz otrzymują:

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' 

Chociaż widzę 'send_daily_email' kiedy uruchomić `Heroku uruchomić bin/python app/manage.py```.

Będę aktualizował, jeśli natknę się na odpowiedź.

Odpowiedz

3

Prawdopodobnie używasz innego tłumacza.

Sprawdź, czy powłoka Pythona jest taka sama, jak w skryptach/usr/bin/python. Może się zdarzyć, że na twojej ścieżce jest inny, co wyjaśniałoby, dlaczego działa po uruchomieniu python manage.py, ale nie w scripu powłoki, który jawnie odwołujesz do /usr/bin/python.


Wpisanie which python powie Ci, co tłumacz znajduje się na twojej ścieżce.

+0

Wow. Masz rację. Kiedy nazywam '' 'heroku uruchom bin/python bin/send_daily_email.py''' (w przeciwieństwie do' '' heroku uruchom bin/send_daily_email.py).Zmienię moją odpowiedź i pokażę moją obecną odpowiedź, aby sprawdzić, czy możesz pomóc :) Ale powiedziałbym, że odpowiedziałeś na to pytanie. – kturner

2

Ponadto można to rozwiązać, dodając swój katalog domowy do ścieżki Python. Szybkim i nie rzucającym się w oczy sposobem jest dodanie go do zmiennej środowiskowej PYTHONPATH (która jest ogólnie/app na stosie Heroku Cedar).

Dodaj go za pomocą polecenia Heroku config:

$ heroku config:add PYTHONPATH=/app 

To powinno wystarczyć! Aby uzyskać więcej informacji: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/

Powiązane problemy