Django/Celery和CloudAMQP/Heroku的连接错误

问题描述:

我有一个我已经部署到Heroku的Django应用程序。这个应用程序使用Celery进行消息排队,并且我已经在本地使用RabbitMQ在没有事件的情况下运行它。Django/Celery和CloudAMQP/Heroku的连接错误

不幸的是,当我去部署这个宝贝到Heroku时,我发现RabbitMQ插件不可用,我不得不使用CloudAMQP。 CloudAMQP和Heroku的文档让我相信我可以使用Celery(尽管他们推荐Pika),但是当我尝试部署时,我的调度程序和工作进程都会出现严重的连接错误。这里有精确的错误:

2012-07-09T16:46:22+00:00 app[scheduler.1]: [2012-07-09 11:46:22,234: ERROR/Beat] Celerybeat: Connection error: [Errno 111] Connection refused. Trying again in 2.0 seconds... 
2012-07-09T16:46:23+00:00 app[worker.1]: [2012-07-09 11:46:23,852: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 2 seconds... 

我要指出,我的Heroku的配置瓦尔DO有CLOUDAMQP_URL,所以这不应该是一个问题吗?

如果有人在Django/Heroku上使用过CloudAMQP,可以给我一些关于如何确保Celery可以与经纪人联系的指导,我将不胜感激。

+0

你有多少个工作的dynos? – danihp 2012-07-09 18:53:19

您可能超过了免费计划的3个并发连接限制。将BROKER_POOL_LIMIT设置为1,它应该工作得更好。

+1

一旦你超过了连接限制,是否有一种简单的方法可以将连接重置为0?重置我的dynos似乎没有办法。 – 2013-05-18 20:10:19

+0

@ theStreaker123我使用'heroku重新启动myworker -a myapp'它重新启动我的工人。 – Neara 2013-07-21 11:07:12

+1

@Jeff这是晚了两年,但你需要[确保你有心跳设置](https://www.cloudamqp.com/docs/python.html),然后强制杀死你的不包含心跳的连接。您也可以通过将“heartbeat = 30”附加到您的CAMQP代理网址来设置CloudAMQP心跳,但据我所知它没有记录。 – grokpot 2015-02-16 19:20:23

请确保您在settings.py文件的顶部有此项。

import djcelery 
djcelery.setup_loader() 
+0

欢迎来到StackOverflow。感谢您发布答案。 – davidethell 2012-11-15 20:24:46