Exécution de Django tâche personnalisée manage.py sur Heroku - Questions Importation
-
28-10-2019 - |
Question
Je suis en train d'exécuter une commande de django personnalisé comme une tâche planifiée sur Heroku. Je suis en mesure d'exécuter la commande personnalisée localement via: python manage.py send_daily_email
. (Note: Je n'ai pas de problèmes avec la commande de gestion personnalisée lui-même)
Cependant, Heroku me donne l'exception suivante lorsque vous essayez de "Exécuter" la tâche par addon 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
Je placé un script python /bin/send_daily_email.py , et il est le suivant:
#! /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
Dans Heroku, cependant, je suis en mesure d'exécuter heroku run bin/python
- lancer le shell python - et settings
avec succès l'importation de django.conf
Je suis sûr qu'il a quelque chose à voir avec mon PYTHON_PATH
ou de la visibilité au SETTINGS_MODULE
de Django, mais je ne suis pas sûr comment résoudre le problème. Quelqu'un peut-il m'indiquer la bonne direction? Y at-il un moyen plus facile d'accomplir ce que je suis en train de faire ici?
Merci beaucoup pour vos conseils et des conseils à l'avance! Nouveau sur Heroku! :)
EDIT:
Commentaire de Per Nix, j'ai fait quelques ajustements, et avons découvert que mon chemin spécifiant python exact, je l'ai fait passer le programme d'installation de Django.
Je reçois maintenant:
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'
Bien, je peux voir 'send_daily_email' quand je lance `` heroku exécuter bin / python app / manage.py```.
Je vais garder une mise à jour si je viens dans la réponse.
La solution
Vous utilisez probablement un autre interprète.
Vérifiez que python shell est le même que celui que vous faites référence dans votre script / usr / bin / python. Il pourrait être qu'il ya un différent dans votre chemin, ce qui expliquerait pourquoi il fonctionne lorsque vous exécutez python manage.py
mais pas votre scrip shell que vous explicitement /usr/bin/python
de référence.
which python
Typing vous dira ce que l'interprète a bien été trouvé sur votre chemin.
Autres conseils
De plus, cela peut aussi être résolu en ajoutant votre répertoire à votre chemin Python. Un moyen rapide et discret pour y parvenir est d'ajouter à la variable d'environnement PYTHONPATH (qui est généralement / app sur la pile Cedar Heroku).
Ajoutez via la commande config Heroku:
$ heroku config:add PYTHONPATH=/app
Cela devrait le faire! Pour plus de détails: http://tomatohater.com/ 2012/01/17 / custom-django-gestion-commandes-sur-heroku /