【问题标题】:Heroku Django Celery: NameError: name 'DATABASES' is not definedHeroku Django Celery:NameError:未定义名称'DATABASES'
【发布时间】:2012-01-25 20:34:39
【问题描述】:

我正在按照this 教程让 celery 和 django 在 heroku 上运行。

但是,当我为工人输入指定的代码时,我的日志中出现了这个错误:

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'],它运行良好。根据the document

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这正是我想要的。谢谢!
    【解决方案2】:

    在运行你的应用之前试试这个:

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

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

    【讨论】:

    • 你的意思是做heroku run export DATABASE_URL='postgres://postuser:postpassword@posthost/dbname' 然后重启我的应用程序?而且我必须输入我所有的数据库信息?如果 Heroku 应该将此附加到我的 settings.py 中,为什么它不起作用,因为我按照教程进行操作?
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2022-10-16
    • 2018-07-14
    • 2017-12-25
    相关资源
    最近更新 更多