Celery:忽略配置文件中的BROKER_URL

wol*_*ude 8 config configuration-files celery

我的问题是这个问题的重复,但更详细.

问题是,我有一个BROKER_URL在我的芹菜配置文件设置,但没有反映在和我正在装载配置:我查了一下,它被加载-事实上,其他常量定义有被设置,只是不BROKER_URL.

这似乎是一个错误,但我想确定.


celeryconfig.py:

BROKER_URL = "amqp://user:password@remote.server.com:5672//vhost"

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
Run Code Online (Sandbox Code Playgroud)

(JSON被用作序列化器,不是Pickle,所以我知道这是有效的.)

app.py:

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')
app.config_from_object('celeryconfig')
Run Code Online (Sandbox Code Playgroud)

调用工人:

celery -A app.app worker -l info
Run Code Online (Sandbox Code Playgroud)

但后来我明白了:

[2013-11-12 11:20:51,610: INFO/MainProcess] consumer: Connected to amqp://guest@127.0.0.1:5672//.
Run Code Online (Sandbox Code Playgroud)

我试过分手BROKER_URL,但无济于事:

BROKER_TRANSPORT = 'amqp'
BROKER_USER = 'user'
BROKER_PASSWORD = 'password'
BROKER_HOST = 'remote.server.com'
BROKER_PORT = 5672
BROKER_VHOST = '/vhost'
Run Code Online (Sandbox Code Playgroud)

有趣的是,它的工作时,我明确地设置BROKER_URLapp.py:

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')
app.config_from_object('celeryconfig')
app.conf.BROKER_URL = "amqp://user:password@remote.server.com:5672//vhost"
Run Code Online (Sandbox Code Playgroud)

wol*_*ude 15

当然,我在完成这个问题之后立即意识到我做错了什么,但我仍然发布它,因为有人可能觉得它很有用.

我的问题是我复制并粘贴了教程中的代码(*facepalm).

当我用brokerarg 定义应用程序时,我正在覆盖配置文件:

app = Celery('tasks', broker='amqp://guest@localhost//')
Run Code Online (Sandbox Code Playgroud)

只需删除:

app = Celery('tasks')
Run Code Online (Sandbox Code Playgroud)

田田!一切都很好......我学到了宝贵的一课.


use*_*214 7

只是为了澄清,因为你正在使用这个:

app.config_from_object('django.conf:settings', namespace='CELERY')
Run Code Online (Sandbox Code Playgroud)

您必须在 celeryconfig.py 中CELERY_BROKER_URL条目中添加前缀:

CELERY_BROKER_URL = "amqp://user:password@remote.server.com:5672//vhost"

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
Run Code Online (Sandbox Code Playgroud)