2012-07-09 56 views
4

我有一個我已經部署到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

回答

6

您可能超過了免費計劃的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

4

請確保您在settings.py文件的頂部有此項。

import djcelery 
djcelery.setup_loader() 
+0

歡迎來到StackOverflow。感謝您發佈答案。 – davidethell 2012-11-15 20:24:46