我们在Heroku上使用带有Django 1.33.1的Celery 4.1.0。 Procfile中配置了两个dynos,一个用于Web,一个用于Celery worker和beat:
web: gunicorn dms.wsgi --log-file=-
worker: celery -A dms.tasks worker -B --scheduler django_celery_beat.schedulers:DatabaseScheduler --without-gossip --without-mingle --without-heartbeat
配置了几个计划任务,执行得很好。但是,当尝试向代理发送任务时,它显示ConnectionRefusedError: [Errno 111] Connection refused
,看起来不管代理的类型如何(实际上该过程只是超时并且仅在手动发送任务时显示错误但我们怀疑这与different bug)
我尝试了RabbitMQ和Redis,并在两者上都收到了相同的错误消息。这是一个只有一个用户的登台环境,我仔细检查了我们没有达到任何队列/连接限制。
dms/settings.py
:
CELERY_BROKER = os.environ.get('CELERY_BROKER')
CELERY_TASK_IGNORE_RESULT = True
BROKER_POOL_LIMIT = 1
CELERY_IMPORTS = (
'dms.tasks',
'core.tasks',
)
dms/tasks.py
:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dms.settings')
app = Celery('dms', broker=settings.CELERY_BROKER)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks()
我们还联系了Heroku和CloudAMQP支持。