Ошибка "Неизвестная задача" в цветке сельдерея при публикации новой задачи
Я бегу сельдерея 3.1.11 и цветок 0.6.0 .
У меня есть приложение сельдерея, настроенное как таковое;
# myapp.tasks.celery.py
from __future__ import absolute_import
from celery import Celery
class Config(object):
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = None
CELERY_RESULT_SERIALIZER = 'json'
CELERY_INCLUDE = [
'myapp.tasks.source',
'myapp.tasks.page',
'myapp.tasks.diffusion',
'myapp.tasks.place',
]
)
celery = Celery('myapp')
celery.config_from_object(Config)
if __name__ == '__main__':
celery.start()
Я выполняю работника сельдерея, используя следующую команду:
$ celery -A myapp.tasks worker --loglevel=INFO -E -Q celery
Я могу увидеть полный список доступных задач в выводе работника.
[tasks]
...
. myapp.tasks.diffusion.post_activity
...
Затем я выполняю цветочный сервер с помощью следующей команды:
$ celery -A myapp.tasks flower
Теперь, всякий раз, когда я пытаюсь опубликовать новую задачу с помощью API Flower REST, я получаю сообщение об ошибке 404 с сообщением об ошибке "Неизвестная задача TASK_NAME".
[W 140423 12:16:17 web:1302] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194): Unknown task 'myapp.tasks.diffusion.post_activity'
[W 140423 12:16:17 web:1728] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194) 4.68ms
Я поместил точку останова pdb в обработчик API-интерфейса flower, и похоже, что единственными задачами, доступными при обработке запросов, являются следующие:
ipdb> pp celery.tasks
{'celery.backend_cleanup': <@task: celery.backend_cleanup of yoda.tasks.celery:0x7fb9191eb490>,
'celery.chain': <@task: celery.chain of yoda.tasks.celery:0x7fb9191eb490>,
'celery.chord': <@task: celery.chord of yoda.tasks.celery:0x7fb9191eb490>,
'celery.chord_unlock': <@task: celery.chord_unlock of yoda.tasks.celery:0x7fb9191eb490>,
'celery.chunks': <@task: celery.chunks of yoda.tasks.celery:0x7fb9191eb490>,
'celery.group': <@task: celery.group of yoda.tasks.celery:0x7fb9191eb490>,
'celery.map': <@task: celery.map of yoda.tasks.celery:0x7fb9191eb490>,
'celery.starmap': <@task: celery.starmap of yoda.tasks.celery:0x7fb9191eb490>}
Нет задач, кажется, доступны. Тем не менее, когда я использую задачу async_apply()
Метод в оболочке, задача выполняется рабочим.
Есть идеи, что я делаю не так? Спасибо!
Редактировать: когда я использую сельдерей 3.0.19 и цветок 0.5.0, он работает на первый взгляд.
2 ответа
Эта ошибка произошла из-за ошибки в Flower и теперь была устранена:
Проблема: https://github.com/mher/flower/issues/200
Разрешающая фиксация: https://github.com/mher/flower/commit/bfba1eec90124c92586c480aebaf98ae63c31276
У меня были похожие проблемы с flower
, Моя конфигурация использовала Redis.
Ситуация улучшилась в тот момент, когда я запустил цветок с явным значением опции "брокер" (не спрашивайте меня, почему).
В вашей ситуации я бы попробовал
$ flower -r "amqp://"
Во всяком случае, я бы также убедился, что вы начинаете celery
а также redis
из среды, которая имеет надлежащий доступ ко всем вашим библиотекам.