Domanda

Sto cercando di eseguire un comando django personalizzato come attività programmata su Heroku. Sono in grado di eseguire il comando personalizzato localmente tramite: python manage.py send_daily_email. (Nota: non ho problemi con il comando di gestione personalizzato stesso)

Tuttavia, Heroku mi sta dando la seguente eccezione quando provo a "eseguire" l'attività tramite il componente aggiuntivo di 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

Ho messo una sceneggiatura Python in /bin/send_daily_email.py, ed è il 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 di Heroku, tuttavia, sono in grado di correre heroku run bin/python - Avvia la shell Python - e importa correttamente settings da django.conf

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

Grazie mille per i tuoi consigli e consigli in anticipo! Nuovo a Heroku! :)

MODIFICARE:

Per commento di Nix, ho apportato alcune modifiche e ho scoperto che specificando il mio percorso esatto Python, ho superato la configurazione di Django.

Ora ricevo:

  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 eseguo `` Heroku run bin/python app/manage.py```.

Terrò un aggiornamento se incontro la risposta.

È stato utile?

Soluzione

Probabilmente stai usando un interprete diverso.

Verifica assicurarsi che Shell Python sia uguale a quello che fai riferimento nel tuo script/usr/bin/python. Potrebbe essere che ce ne sia uno diverso nel tuo percorso, il che spiegherebbe perché funziona quando corri python manage.py Ma non lo scrip di shell a cui fai riferimento esplicitamente /usr/bin/python.


Digitando which python Ti dirà quale interprete si trova sul tuo percorso.

Altri suggerimenti

Inoltre, questo può anche essere risolto aggiungendo la tua home directory al percorso Python. Un modo rapido e discreto per raggiungere questo è aggiungerlo alla variabile di ambiente Pythonpath (che è generalmente /app sullo stack di Cedar Heroku).

Aggiungilo tramite il comando di configurazione Heroku:

$ heroku config:add PYTHONPATH=/app

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top