Django + Celery 4 错误设置
Django + Celery 4 wrong settings
我正在使用 Django 1.10 和 Celery 4。
我在 Celery 的文档中发现了漏洞:(
worker 配置完成得很好 运行 很好(我可以在 RabbitMQ webmin 中看到 worker 已连接)。但是我的任务无法连接到 RabbitMQ 来发布它们的消息。
settings.py
CELERY_BROKER_URL = 'amqp://dev:dev@localhost/dev_virtualhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
celery.py
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
app = Celery('dev_app')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py
from celery import shared_task
@shared_task(queue='data_to_write')
def test_task(data):
open('/tmp/test', 'w').write(data)
来自 Django 的 Shell 我 运行 这段代码失败了 :(
test_task.delay('hello world')
AccessRefused: (0, 0): (403) ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录。有关详细信息,请参阅代理日志文件。
在 RabbitMQ 日志中,我看到凭证是 guest:guest,不像我在 settings.py.
中写的那样 dev:dev
我的错误在哪里?谢谢
解决方案是将 celery.py
重命名为 celery_app.py
以避免自动导入。
那么你必须这样执行celery:
celery --app=PACKAGE.celery_app:app worker
PACKAGE 是您放置 celery_app.py
的模块(文件夹)
我正在使用 Django 1.10 和 Celery 4。
我在 Celery 的文档中发现了漏洞:(
worker 配置完成得很好 运行 很好(我可以在 RabbitMQ webmin 中看到 worker 已连接)。但是我的任务无法连接到 RabbitMQ 来发布它们的消息。
settings.py
CELERY_BROKER_URL = 'amqp://dev:dev@localhost/dev_virtualhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
celery.py
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
app = Celery('dev_app')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py
from celery import shared_task
@shared_task(queue='data_to_write')
def test_task(data):
open('/tmp/test', 'w').write(data)
来自 Django 的 Shell 我 运行 这段代码失败了 :(
test_task.delay('hello world')
AccessRefused: (0, 0): (403) ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录。有关详细信息,请参阅代理日志文件。
在 RabbitMQ 日志中,我看到凭证是 guest:guest,不像我在 settings.py.
中写的那样 dev:dev我的错误在哪里?谢谢
解决方案是将 celery.py
重命名为 celery_app.py
以避免自动导入。
那么你必须这样执行celery:
celery --app=PACKAGE.celery_app:app worker
PACKAGE 是您放置 celery_app.py
的模块(文件夹)