我尝试设置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管理员创建定期任务,但我仍然坚持这一点,所以欢迎任何帮助。
答案 0 :(得分:0)
我认为您还必须添加CELERY_RESULT_BACKEND
的设置。将其设置为'django-db'
,就像您对代理所做的那样。如果这还不够,请尝试使用CELERY_BROKER_URL
而不是参数设置代理。
答案 1 :(得分:0)
您正在使用amqp://ip-or-host-here
作为代理,其中celery认为它是主机地址。您应该使用真实的经纪人地址(例如,对于rabbitmq,例如Celery()
)。尝试设置broker_url并删除setDaemon(true)
中的代理参数,使其指向正确的方向。