Heroku Django:运行工人

Posted

技术标签:

【中文标题】Heroku Django:运行工人【英文标题】:Heroku Django: Running a Worker 【发布时间】:2012-03-23 07:00:45 【问题描述】:

我正在关注Heroku Django tutorial。我相信我完全遵循了它。除了他们要求的以外,我没有运行其他命令。

但是,当我到达同步 Celery 和 Kombu 表的部分时(在“运行 Worker”部分下),我遇到了一个错误。

输入他们的命令python hellodjango/manage.py syncdb,给我以下信息:

...
File "/Users/Alex/Coding/getcelery/venv/lib/python2.7/site-packages/django/db/backends/dummy/base.py", line 15, in complain
    raise ImproperlyConfigured("You haven't set the database ENGINE setting yet.")
django.core.exceptions.ImproperlyConfigured: You haven't set the database ENGINE setting yet.

以前有人遇到过这个问题吗?我应该做一些教程中没有明确说明的事情吗?

任何提示将不胜感激!

【问题讨论】:

嘿,我在本地创建表时遇到了同样的问题。我发现您使用 sqlite3 作为本地数据库,但这会与远程产生冲突吗?因为heroku remote 仍在使用postgresql。 【参考方案1】:

您的输出来自在本地运行 syncdb。启用数据库插件将在您的配置中设置DATABASE_URL,从而设置测功机的环境(请参阅heroku config)。它不会在本地设置 DATABASE_URL - 您需要自己设置(或对其他本地数据库进行排序)

【讨论】:

我在本地添加了一个 sqlite 数据库(我想这就是我所做的一切),在本地配置它,一切都开始工作了!谢谢【参考方案2】:

这可能是因为您的 DATABASE 字典未定义。您可以尝试添加应该从环境变量中读取数据库的代码,然后可以从中设置 CELERY db:

import os
import sys
import urlparse

# Register database schemes in URLs.
urlparse.uses_netloc.append('postgres')
urlparse.uses_netloc.append('mysql')

try:

    # Check to make sure DATABASES is set in settings.py file.
    # If not default to 

    if 'DATABASES' not in locals():
        DATABASES = 

    if 'DATABASE_URL' in os.environ:
        url = urlparse.urlparse(os.environ['DATABASE_URL'])

        # Ensure default database exists.
        DATABASES['default'] = DATABASES.get('default', )

        # Update with environment configuration.
        DATABASES['default'].update(
            'NAME': url.path[1:],
            'USER': url.username,
            'PASSWORD': url.password,
            'HOST': url.hostname,
            'PORT': url.port,
        )
        if url.scheme == 'postgres':
            DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'

        if url.scheme == 'mysql':
            DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
except Exception:
    print 'Unexpected error:', sys.exc_info()

【讨论】:

我尝试将此代码添加到settings.py,但在执行syncdb 时仍然遇到完全相同的错误。该教程说“当您部署 Django 应用程序时,编译过程会将 [上面的代码 sn-p] 附加到您的 settings.py 以使用 DATABASE_URL 环境变量”。 上面的“尚未设置数据库引擎设置”(更新)错误的任何线索?您是否成功地完成了本教程?您能提供的任何帮助都会很棒

以上是关于Heroku Django:运行工人的主要内容,如果未能解决你的问题,请参考以下文章

Heroku procfile多个工人[重复]

为啥我的 heroku 工人 dyno 不工作?

Heroku 零星的高响应时间

用于 node.js 的 Heroku 工作者

为啥我的 Django 应用程序可以在本地运行,但不能在 Heroku 上运行?

Heroku 中没有运行 Django 的 Web 进程