2011-12-05 7 views
5

Sto tentando di eseguire un comando personalizzato django come operazione pianificata su Heroku. Sono in grado di eseguire il comando personalizzato localmente tramite: python manage.py send_daily_email. (Nota: non ho alcun problema con il comando di gestione personalizzato stesso)Esecuzione dell'attività Django personalizzata manage.py su Heroku - Problemi di importazione

Tuttavia, Heroku mi sta dando la seguente eccezione quando si cerca di "Run" il compito attraverso Heroku Scheduler addon:

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 collocato uno script python in /bin/send_daily_email.py, ed è la seguente:

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

All'interno Heroku, tuttavia, sono in grado di eseguire heroku run bin/python - avviare la shell di pitone - e successo completamente importare settings da django.conf

Sono abbastanza sicuro che abbia qualcosa a che fare con la mia PYTHON_PATH o la visibilità di Django di SETTINGS_MODULE, ma sono sicuri di come risolvere il problema. Potrebbe qualcuno indicarmi la giusta direzione? C'è un modo più semplice per realizzare ciò che sto cercando di fare qui?

Grazie mille per i vostri suggerimenti e consigli in anticipo! Nuovo per Heroku! :)

EDIT:

commento di Per Nix, ho fatto alcune modifiche, e ha scoperto che la mia specifica esatto percorso pitone, ho fatto andare oltre la configurazione Django.

ora di ricezione:

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' 

Anche se, posso vedere 'send_daily_email' quando corro `` Heroku gestita bin/python app/manage.py```.

Terremo un aggiornamento se trovo la risposta.

risposta

3

Probabilmente stai usando un interprete diverso.

Verificare che shell python sia uguale a quello di riferimento nel proprio script/usr/bin/python. Potrebbe essere che nel tuo percorso ce ne sia uno diverso, il che spiegherebbe il motivo per cui funziona quando esegui python manage.py ma non lo script della shell che fai esplicitamente riferimento a /usr/bin/python.


Digitando which python vi dirà cosa interprete viene trovato sul vostro cammino.

+0

Wow. Hai ragione. Quando chiamo '' 'heroku esegui bin/python bin/send_daily_email.py''' (contro' '' heroku run bin/send_daily_email.py).Rivedretterò la mia risposta e mostrerò la mia attuale risposta per vedere se puoi aiutare :) Ma direi di aver risposto alla domanda. – kturner

2

Inoltre, questo problema può essere risolto aggiungendo la directory home al percorso Python. Un modo rapido e non invadente per farlo è aggiungerlo alla variabile d'ambiente PYTHONPATH (che è generalmente/app sullo stack Heroku Cedar).

Aggiungere tramite il comando Heroku config:

$ heroku config:add PYTHONPATH=/app 

Che dovrebbe farlo! Per ulteriori dettagli: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/