Django芹菜以Django作为后端击败

时间:2018-02-19 15:10:17

标签: django django-celery

我尝试设置Django-celery-beat以创建定期任务。 我的配置如下:

from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
celery = Celery(broker="django-db")
celery.autodiscover_tasks()

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler'

我试图将Django用作数据库并运行节拍服务和工作人员。

当我启动这样的工人时:

celery -A monitoring worker --loglevel=DEBUG --app=config.settings.local

......我明白了:

ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@django-db:5672//: [Errno 8] nodename nor servname provided, or not known.

当我在击败时尝试它时:

celery -A monitoring beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler --app=config.settings.local

我收到此错误:

ERROR/MainProcess] beat: Connection error: [Errno 8] nodename nor servname provided, or not known. Trying again in 4.0 seconds...

我希望能够通过Django管理员创建定期任务,但我仍然坚持这一点,所以欢迎任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为您还必须添加CELERY_RESULT_BACKEND的设置。将其设置为'django-db',就像您对代理所做的那样。如果这还不够,请尝试使用CELERY_BROKER_URL而不是参数设置代理。

答案 1 :(得分:0)

您正在使用amqp://ip-or-host-here作为代理,其中celery认为它是主机地址。您应该使用真实的经纪人地址(例如,对于rabbitmq,例如Celery())。尝试设置broker_url并删除setDaemon(true)中的代理参数,使其指向正确的方向。