Сельдерей не подключается к серверу Redis - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение django 2.0.5, использующее celery == 4.2.1, redis == 2.10.6, redis-server = 4.0.9. Когда я начинаю работать с сельдереем, я получаю следующее:

-------------- celery@octopus v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.18.16-surface-linux-surface-x86_64-with-Ubuntu-18.04-bionic 2018-10-31 17:33:50
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7fd6c537b240
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

Но в моих настройках Django у меня есть:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_IMPORTS = ('memorabilia.tasks',
                  'face_recognition.tasks',
                  )

Мой celery.py выглядит так:

# http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.apps import apps
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MemorabiliaJSON.settings.tsunami')

app = Celery('MemorabiliaJSON')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])

Тот же код (предоставленный через мой git-сервер) работает на моей машине для разработки, хотя сервер redis немного старше - v = 2.8.4. Машина для разработки - Ubunut 14.04, а ноутбук - Ubuntu 18.04. Под работами я имею в виду вывод сельдерея на моей машине для разработки:

 -------------- celery@tsunami v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.4.0-138-generic-x86_64-with-Ubuntu-14.04-trusty 2018-10-31 17:38:09
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7f356e024c18
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

Как мне заставить celery читать конфигурационный файл django, отличный от того, что у меня есть в celery.py?

Спасибо!

Mark

Ответы [ 4 ]

0 голосов
/ 02 июля 2019

Совершенно не связано с тем, как вы ее решили, но у меня была похожая проблема, когда «транспортный» URL в конфиге искал порт 5672 (вместо 6379 в redis, URL результатов был правильным). При отладке ранее я удалил пространство имен из app.config_from_object. Положив его обратно решил мою проблему. Поместите это здесь для любого, кто делает ту же ошибку и приходит сюда

0 голосов
/ 04 ноября 2018

Если вы внимательно посмотрите на вывод сельдерея из celery@octopus, вы увидите, что он подключен к брокеру amqp, а не к брокеру redis: amqp://guest:**@localhost:5672//. Это означает, что ваш рабочий-осьминог где-то настроен так, чтобы он указывал на брокера rabbitmq, а не на брокера redis. Чтобы исправить это, вы должны будете найти, где находится этот параметр конфигурации rabbitmq broker, и посмотреть, как он используется в сельдерее. Потому что то, что нам говорит broker_url, так или иначе, что сельдерей каким-то образом перенастраивается в другом месте или что на сервере применяются другие настройки.

0 голосов
/ 09 ноября 2018

В интересах закрытия этого вопроса я отвечу на него. Если честно, я не уверен, как я исправил проблему, но она исчезла после нескольких изменений и перезагрузок моей системы. Настройка все та же, что и выше.

Позже я обнаружил, что у меня была проблема с именованием модулей в том, что два модуля имели одно и то же имя. Как только я исправил эту проблему, большинство других моих проблем с сельдереем исчезло. Однако, чтобы было ясно, часть redis / celery работала до того, как я исправил проблему с именами модулей.

Спасибо всем, кто разместил предложения на мой вопрос!

0 голосов
/ 01 ноября 2018

Пожалуйста, обновите CELERY_BROKER_URL как показано ниже:

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

Вы можете ознакомиться с документацией о подключении Redis в качестве брокера в здесь .

...