Pregunta

Estoy tratando de ejecutar un comando Django personalizado como una tarea programada en Heroku. Puedo ejecutar el comando personalizado localmente a través de: python manage.py send_daily_email. (Nota: no tengo ningún problema con el comando de administración personalizada en sí)

Sin embargo, Heroku me está dando la siguiente excepción al tratar de "ejecutar" la tarea a través del complemento de 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

Puse un guión de Python en /bin/send_daily_email.py, y es lo siguiente:

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

Dentro de Heroku, sin embargo, puedo correr heroku run bin/python - Inicie el shell de Python - e importe con éxito settings de django.conf

Estoy bastante seguro de que tiene algo que ver con mi PYTHON_PATH o visibilidad a Django's SETTINGS_MODULE, pero no estoy seguro de cómo resolver el problema. ¿Alguien podría señalarme en la dirección correcta? ¿Hay una forma más fácil de lograr lo que estoy tratando de hacer aquí?

¡Muchas gracias por sus consejos y consejos de antemano! ¡Nuevo en Heroku! :)

EDITAR:

Según el comentario de Nix, hice algunos ajustes, y descubrí que especificando mi camino exacto de Python, superé la configuración de Django.

Ahora recibo:

  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'

Aunque, puedo ver 'send_daily_email' cuando ejecuto `` Heroku Run bin/python app/manage.py```.

Mantendré una actualización si me encuentro con la respuesta.

¿Fue útil?

Solución

Probablemente esté usando un intérprete diferente.

Verifique para asegurarse de que Shell Python sea el mismo que el que hace referencia en su script/usr/bin/python. Podría ser que hay uno diferente en su camino, lo que explicaría por qué funciona cuando corres python manage.py Pero no su guión de shell a la que se hace referencia explícitamente /usr/bin/python.


Mecanografía which python Te dirá qué intérprete se encuentra en tu camino.

Otros consejos

Además, esto también se puede resolver agregando su directorio de inicio a su ruta de Python. Una forma rápida y discreta de lograrlo es agregarlo a la variable de entorno de Pythonpath (que generalmente /APP en la pila de cedro de Heroku).

Agrégalo a través del comando de configuración de Heroku:

$ heroku config:add PYTHONPATH=/app

¡Deberias hacer eso! Para más detalles: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top