Сельдерей — [Errno 111] соединение отказано, когда задача сельдерей запускается с помощью задержки()

У меня есть два сервера приложений(оба с приложением django). Оба имеют сельдерей рабочий работает. Сервер RabbitMQ настроен на третьем другом сервере.

Когда какая-либо тестовая задача выполняется с любого из двух серверов приложения через оболочку с помощью delay(), они выполняются нормально.

Если та же задача запускается из server1 из браузера (через ajax), она снова работает нормально.

Но в случае server2 (имеющий ту же конфигурацию и код, что и server1), когда та же задача запускается из браузера, он дает [ошибка 111] ошибка соединения отказано.

Некоторые из установленных пакетов на server1 или server2:

celery 3.1.18
amqp 1.4.9
django 1.8.5

Кто-нибудь может мне помочь? Спасибо!

Трассировка ошибки выглядит следующим образом:

Файл "../lib/python2.7/site-packages/celery/app/task.py " in delay
 453. вернуть себя.apply_async(args, kwargs)
Файл "../lib/python2.7/site-packages/celery/app/task.py " in apply_async
 559. ** дикт (self._get_exec_options (), * * options)
Файл "../lib/python2.7/site-packages/celery/app/base.py " in send_task
 353. reply_to=reply_to или self.oid, * * параметры
Файл "../lib/python2.7/site-packages/celery/app/amqp.py " in publish_task
 305. ** кварги
Файл "../lib/python2.7/site-packages/kombu/messaging.py " in publish
 172. routing_key, обязательный, немедленный, обмен, объявление)
Файл "../lib/python2.7/site-packages/kombu/connection.py " in _ensured
 457. interval_max)
Файл "../lib/python2.7/site-packages/kombu/connection.py " in ensure_connection
 369. interval_start, interval_step, interval_max, обратный вызов)
Файл "../lib/python2.7/site-packages/kombu/utils/__init__.py " in retry_over_time
 246. возвращение fun (*args, * * kwargs)
Файл "../local/lib/python2.7/site-packages/kombu/connection.py " in connect
 237. вернуть себя.соединение
Файл "../lib/python2.7/site-packages/kombu/connection.py " в связи
 742. личность._connection = self._установить соединение()
Файл "../lib/python2.7/site-packages/kombu/connection.py " in _establish_connection
 697. conn = self.транспорт.установить соединение()
Файл "../lib/python2.7/site-packages/kombu/transport/pyamqp.py " in establish_connection
 116. conn = self.Подключение (**opts)
Файл "../lib/python2.7/site-packages/amqp/connection.py " in _ _ init__
 165. личность.транспорт = сам.Транспорт (хост, connect_timeout, ssl)
Файл "../lib/python2.7/site-packages/amqp/connection.py " в транспорте
 186. возврат create_transport (host, connect_timeout, ssl)
Файл "../lib/python2.7/site-packages/amqp/transport.py " в create_transport
 299. возврат TCPTransport (host, connect_timeout)
Файл "../lib/python2.7/site-packages/amqp/transport.py " in _ _ init__
 95. поднимите гнездо.ошибка (last_err)

1 ответ

  1. Я бы сказал, что начните добавлять некоторые дополнительные вызовы регистрации перед вызовом задержки на server2, чтобы убедиться, что ваша конфигурация сельдерея правильна при запуске ее в качестве веб-сервера (в отличие от manage.py shell instance). Похоже, какой-то скрипт запуска для gunicorn / uwsgi / apache / magic не загружает некоторую переменную, необходимую для правильной настройки сельдерея. Или это просто переопределяется каким-то образом в этом контексте.

    Действительно ужасный метод-запустить ваш веб-сервер на server2 как manage.py runserver и положить PDB там прямо перед вызовом .delay()и ковыряться. Не совсем то, что вы хотите открыть для общего интернета, когда вы делаете это, но когда все остальное терпит неудачу…