2012-07-09 5 views
4

У меня есть приложение Django, которое я уже развернул в Heroku. Это приложение использует Celery для очереди сообщений, и я запускал его локально, используя RabbitMQ без инцидентов.Ошибка соединения с Django/Celery и CloudAMQP/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, так что не должен быть проблемой?

Я был бы признателен, если бы кто-нибудь, кто использовал CloudAMQP с Django/Heroku, мог дать мне несколько советов о том, как убедиться, что Celery может связаться с брокером.

+0

Сколько рабочих динов у вас есть? – danihp

ответ

6

Возможно, вы превысили ограничение на 3 одновременных соединения свободного плана. Установите BROKER_POOL_LIMIT на 1, и он должен работать намного лучше.

+1

Как только вы превысили лимит подключения, существует ли простой способ сбросить соединения до 0? Сброс моих динамиков, похоже, не делает этого трюка. –

+0

@ theStreaker123 Я использую 'heroku restart myworker -a myapp', он перезапускает моих рабочих. – Neara

+1

@Jeff Это уже два года, но вам нужно [убедиться, что у вас настроено сердцебиение] (https://www.cloudamqp.com/docs/python.html), а затем принудительно убить свои соединения, которые не содержат сердечных сокращений. Вы также можете установить Heartbeats CloudAMQP, добавив «' heartbeat = 30'' к вашему URL-адресу брокера CAMQP, но, насколько мне известно, он недокументирован. – grokpot

4

Убедитесь, что у вас есть это в верхней части вашего файла settings.py.

import djcelery 
djcelery.setup_loader() 
+0

Добро пожаловать в StackOverflow. Спасибо, что ответили. – davidethell