2

我现在是一个芹菜菜鸟,但正在努力开始。我正在运行带有 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',)

在日志中。

我究竟做错了什么?

4

1 回答 1

2

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

于 2013-07-19T16:58:58.683 回答