Heroku Django Celery:NameError:名称'DATABASES'未定义

时间:2011-12-22 05:42:41

标签: django heroku django-celery django-settings kombu

我正在跟随this教程,让芹菜和django在heroku上运行。

但是,当我输入worker的指定代码时,我的日志中出现此错误:

2011-12-22T05:31:56+00:00 heroku[web.1]: Starting process with command `python canada/manage.py run_gunicorn -b "0.0.0.0:47336" -w 3`
2011-12-22T05:31:56+00:00 app[web.1]: Unexpected error: (<type 'exceptions.NameError'>, NameError("name 'DATABASES' is not defined",), <traceback object at 0x11a9560>)
2011-12-22T05:31:56+00:00 app[web.1]: Traceback (most recent call last):
2011-12-22T05:31:56+00:00 app[web.1]:   File "canada/manage.py", line 11, in <module>
2011-12-22T05:31:56+00:00 app[web.1]:     import settings
2011-12-22T05:31:56+00:00 app[web.1]:   File "/app/canada/settings.py", line 51, in <module>
2011-12-22T05:31:56+00:00 app[web.1]:     CELERY_RESULT_DBURI = DATABASES['default']
2011-12-22T05:31:56+00:00 app[web.1]: NameError: name 'DATABASES' is not defined
2011-12-22T05:31:57+00:00 heroku[slugc]: Slug compilation finished
2011-12-22T05:31:57+00:00 heroku[web.1]: State changed from starting to crashed
2011-12-22T05:31:58+00:00 heroku[web.1]: Process exited

我的settings.py看起来像

import djcelery

djcelery.setup_loader()

BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
CELERY_RESULT_DBURI = DATABASES['default']
...

当我在添加此行CELERY_RESULT_DBURI = DATABASES['default']之前同步时,它运行正常。根据{{​​3}}

  

部署Django应用程序时,编译过程会将以下代码附加到settings.py以使用DATABASE_URL环境变量:

2 个答案:

答案 0 :(得分:8)

Heroku正在DATABASES的末尾添加settings.py配置,因此当您在settings.py中引用DATABASES时,它就不存在。

您可以在自己的文件中复制Heroku DATABASES设置(只需从env中DATABASE_URL读取,请参阅:django-heroku-template)或使用您自己的buildpack

答案 1 :(得分:0)

在运行您的应用之前尝试此操作:

export DATABASE_URL='postgres://postuser:postpassword@posthost/dbname'

使用环境变量是Heroku自动设置数据库凭据的最简单方法,无需修改settings.py