Как запустить статус / цветок сельдерея без опции -A?

Рассмотрим эту сессию Bash:

$ export DJANGO_SETTINGS_MODULE=web.settings
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10
Error: No nodes replied within time constraint.
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app
celery@worker.9e2c39a1c42c: OK

Зачем мне -A вариант? Насколько я могу сказать, сельдерей должен быть в состоянии обнаружить необходимые метаданные на Redis.

Точно так же, если я бегу celery flower -b <redis url> он показывает, что он успешно подключается к Redis, но не показывает реальных рабочих / задач / очередей и показывает несколько сообщений, таких как 'stats' inspect method failed, Опять добавляем -A заставляет это работать.

Я хочу запустить flower в минимальном автономном контейнере Docker, который не содержит ни моего кода, ни его зависимостей. Несколько репозиториев, таких как этот, предлагают такие вещи. Так как я могу это сделать? Связанное репо предлагает много опций, но не дает возможности указать -A вариант, который предполагает, что это не обязательно.

Я новичок в сельдерее, поэтому я могу упустить что-то глупое. Что я должен сделать?

scaffold.tasks.celery_app Модуль просто выглядит так:

from celery import Celery
from django.conf import settings

app = Celery()
app.config_from_object(settings)

И это настройки Django с сельдереем:

{'BROKER_HEARTBEAT': 0,
 'BROKER_TRANSPORT_OPTIONS': {'fanout_patterns': True,
                              'fanout_prefix': True,
                              'visibility_timeout': 172800},
 'BROKER_URL': 'redis://redis.businessoptics.dev:6379/1',
 'CELERYBEAT_SCHEDULE': {'journey-heartbeat': {'args': (),
                                               'schedule': <crontab: * * * * * (m/h/d/dM/MY)>,
                                               'task': 'kms.data.journey.tasks.heartbeat'}},
 'CELERYD_CONCURRENCY': 1,
 'CELERYD_HIJACK_ROOT_LOGGER': False,
 'CELERYD_LOG_COLOR': False,
 'CELERYD_MAX_TASKS_PER_CHILD': 1,
 'CELERYD_PREFETCH_MULTIPLIER': 1,
 'CELERY_ACCEPT_CONTENT': ['pickle'],
 'CELERY_ACKS_LATE': True,
 'CELERY_DEFAULT_EXCHANGE': 'default',
 'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct',
 'CELERY_DEFAULT_QUEUE': 'default',
 'CELERY_DEFAULT_ROUTING_KEY': 'default',
 'CELERY_IGNORE_RESULT': False,
 'CELERY_IMPORTS': ['kms.knowledge.query.tasks2',
                    # names of several more modules...
                   ],
 'CELERY_QUEUES': [<unbound Queue tablestore -> <unbound Exchange default(direct)> -> kms.data.table_store.tasks.#>,
                    # several more similar-looking Queues...
                   <unbound Queue default -> <unbound Exchange default(direct)> -> default>],
 'CELERY_REDIRECT_STDOUTS': False,
 'CELERY_RESULT_BACKEND': 'database',
 'CELERY_RESULT_DBURI': 'mysql://businessoptics:businessoptics@mysql.businessoptics.dev:3306/product',
 'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': True,
 'CELERY_ROUTES': ['scaffold.tasks.routers.TaskNameRouter'],
 'CELERY_SEND_EVENTS': True,
 'CELERY_SEND_TASK_ERROR_EMAILS': False,
 'CELERY_SEND_TASK_SENT_EVENT': True,
 'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': True,
 'CELERY_TASKNAME_ROUTES': [('tablestore', 'kms.data.table_store.tasks.#'),
                            # bunch of routes...
                            ],
 'CELERY_TASK_RESULT_EXPIRES': None,
 'CELERY_TIMEZONE': 'UTC',
 'CELERY_TRACK_STARTED': True,
 'CELERY_WORKER_DIRECT': True
}

Вот соответствующие версии:

celery==3.1.19
Django==1.8
django-celery==3.1.0
redis==2.10.3

1 ответ

Решение

Опция -A передает экземпляр сельдерея с соответствующей конфигурацией, включая пакет, содержащий ваши задачи.

Чтобы использовать все функции, которые необходимо настроить для работы с цветами, это означает, что вы должны знать пакет, в котором находятся ваши задачи с сельдереем, и знать их.

Добавить в ваш докер-контейнер необходимую библиотеку Python не должно быть так сложно, например, вы можете добавить в этот файл строку конфигурации CELERY_IMPORTS следующим образом:

CELERY_IMPORTS  = os.getenv('CELERY_IMPORTS  ', 'default.package') 

ОБНОВИТЬ

Как @asksol, создатель сельдерея, указал в комментариях более подробное объяснение, почему вам нужна опция -A:

Flower также является потребителем сообщений и поэтому поможет восстановить неиспользованные сообщения. Поскольку у вас определена пользовательская видимость, запуск неконфигурированного цветка означает, что он будет использовать тайм-аут видимости по умолчанию и, таким образом, будет повторно доставлять неупакованные сообщения быстрее, чем ваши сотрудники. Всегда используйте -A, чтобы конфигурация работника, цветка и клиента была синхронизирована

Другие вопросы по тегам