在Heroku上运行Django自定义manage.py任务 - 导入问题

时间:2011-12-05 03:38:24

标签: python django heroku django-settings manage.py

我正在尝试将自定义django命令作为Heroku上的计划任务运行。我可以通过python manage.py send_daily_email在本地执行自定义命令。 (注意:我对自定义管理命令本身没有任何问题)

然而,当尝试通过Heroku Scheduler插件“运行”任务时,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

我在 /bin/send_daily_email.py 中放置了一个python脚本,它是以下内容:

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

然而,在Heroku中,我能够运行heroku run bin/python - 启动python shell - 并从settings成功导入django.conf

我很确定它与我的PYTHON_PATH或Django SETTINGS_MODULE的可见性有关,但我不确定如何解决这个问题。有人能指出我正确的方向吗?有没有更简单的方法来完成我在这里要做的事情?

非常感谢您的提示和建议! Heroku新手! :)

修改

Per Nix的评论,我做了一些调整,确实发现指定我的确切python路径,我确实通过了Django设置。

我现在收到:

  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'

虽然,当我运行``heroku run bin / python app / manage.py```时,我可以看到'send_daily_email'。

如果我遇到答案,我会保留更新。

2 个答案:

答案 0 :(得分:3)

你可能正在使用不同的翻译。

检查以确保shell python与脚本/ usr / bin / python中引用的shell相同。可能是您的路径中有一个不同的路径,这可以解释为什么它在您运行python manage.py而不是您明确引用/usr/bin/python的shell脚本时有效。


键入which python会告诉您在路径上找到的解释器。

答案 1 :(得分:2)

此外,还可以通过将主目录添加到Python路径来解决此问题。一种快速且不显眼的方法是将它添加到PYTHONPATH环境变量(通常是Heroku Cedar堆栈上的/ app)。

通过heroku config命令添加它:

$ heroku config:add PYTHONPATH=/app

应该这样做!有关详细信息:http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/