【发布时间】:2020-12-25 15:53:24
【问题描述】:
按照“Django 3 示例”一书的第 7 章,我正在建立一个在线商店。这本书的作者是Antonio Melé。
在我的本地机器上一切正常。当我将它部署到 Heroku 时,它也能正常工作。
但是,当我尝试使用 Celery 和 RabbitMQ(CloudAMQP,Little Lemur,在 Heroku 上)时,工作人员应该发送给客户的电子邮件消息没有发送。该任务需要超过 30 秒,然后崩溃:
heroku[router]: at=error code=H12 desc="Request timeout" method=POST
我创建了一个 tasks.py 文件,用于发送电子邮件。我的 settings.py 文件包含 Celery 的以下行:
broker_url = os.environ.get('CLOUDAMQP_URL')
broker_pool_limit = 1
broker_heartbeat = None
broker_connection_timeout = 30
result_backend = None
event_queue_expires = 60
worker_prefetch_multiplier = 1
worker_concurrency = 50
这取自https://www.cloudamqp.com/docs/celery.html
而我的Procfile如下,
web: gunicorn shop.wsgi --log-file -
worker: celery worker --app=tasks.app
我错过了什么吗?
谢谢!
【问题讨论】:
-
我现在将 Procfile 行编辑为:
worker: celery -A appname worker -l info。然后 Heroku 尝试发送电子邮件,但它再次崩溃。这一次,它一直在尝试,它给了我以下错误消息:consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection denied .它正在尝试连接到 localhost,即使我在 settings.py 中引用了正确的 Heroku 变量:broker_url = os.environ.get('CLOUDAMQP_URL')
标签: python django heroku rabbitmq celery