我现在是一个芹菜菜鸟,但正在努力开始。我正在运行带有 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',)
在日志中。
我究竟做错了什么?