【问题标题】:Celeryd can't seem to find my Django project’s settingsCeleryd 似乎找不到我的 Django 项目的设置
【发布时间】:2013-07-18 17:55:40
【问题描述】:

我现在是一个 celery 菜鸟,但正在努力开始。我正在运行带有 redis 存储后端的 Django 1.4 + django-celery + celery 3.0.21。我可以通过以下方式让工人和 celerybeat 手动运行:

python manage.py celery worker -E -B --loglevel=INFO -n w1.manual

我想把它移到初始化脚本中。所以,我已经安装了 celery 提供的两个初始化脚本。我可以根据需要运行它们,并且 脚本 工作正常。但是,由脚本启动的工作人员失败了。它似乎没有找到我的项目设置。这是我在 /etc/default/celeryd 的配置文件的内容:

# Name of nodes to start
# here we have a single node
CELERYD_NODES="w1"

# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"

# Where to chdir at start.
CELERYD_CHDIR="/var/www/www_project_com/"

# Extra arguments to celeryd
CELERYD_OPTS="--time-limit=300 --concurrency=8"

# Name of the celery config module.
CELERY_CONFIG_MODULE="celeryconfig"

# %n will be replaced with the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"

# Workers should run as an unprivileged user.
CELERYD_USER="www-data"
CELERYD_GROUP="www-data"

# Name of the projects settings module
export DJANGO_SETTINGS_MODULE="settings"

我的设置文件实际上分为本地/生产/等。生产设置位于此处:

/var/www/www_project_com/project/settings/production.py

我尝试将配置文件的最后一行更改为:

export DJANGO_SETTINGS_MODULE="project.settings.production"

不过好像没什么区别。

我知道初始化脚本正在获取设置文件 /etc/default/celery,因为进程正在使用我自定义的用户和组。

很明显,进程失败了,因为日志显示:

consumer: Cannot connect to amqp://guest@127.0.0.1:5672//: [Errno 111] Connection refused.

我认为这是默认设置。我的 Django 项目配置为使用连接字符串使用 Redis:

BROKER_URL = 'redis://localhost:6379/0'

作为解决此问题的另一种尝试,我尝试将最后一行设置为:

export DJANGO_SETTINGS_MODULE="settings.production"

这会导致:

[2013-07-19 05:31:48,117: ERROR/MainProcess] Unrecoverable error: ImportError('No module named settings',)

在日志中。

我做错了什么?

【问题讨论】:

    标签: django celery django-celery init.d


    【解决方案1】:

    如果您想使用 DJANGO_SETTINGS_MODULE 配置,请确保未设置 CELERY_CONFIG_MODULE 的配置。

    【讨论】:

    • 感谢您的回答。我创建了一个新文件 celeryconfig.py 放在我项目的根目录 /var/www/www_project_com/celeryconfig.py 中,我将所有与 celery 相关的配置复制到该文件中并重试。完全没有区别。 =(
    • 啊哈!所以。事实证明,解决方案是注释掉CELERY_CONFIG_MODULE="..." 行,显然,这覆盖了DJANGO_SETTINGS_MODULE 行。你的评论回答帮助我解决了这个问题,所以我想给你一个功劳。您能否更新您的答案以包含语言“...或者,如果您想使用 DJANGO_SETTINGS_MODULE=...,请注释掉 CELERY_CONFIG_MODULE 行”?如果是这样,我会将其标记为正确。
    • 很高兴听到它现在有效!我继续并更新了答案。现在我很好奇为什么当您将设置移动到 celeryconfig.py 并且 CELERY_CONFIG_MODULE 指向更新的配置文件时它不起作用。
    • 我也想明白这一点。
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多