Eseguire l'attività Django Custom Manage.Py su Heroku - Importazione di problemi
-
28-10-2019 - |
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.
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/