Django-Celery - Повторно отправить задания со страницы администратора? - PullRequest
5 голосов
/ 23 июля 2011

В настоящее время я работаю над проектом, использующим Django 1.3 с приложением Django-Celery. Кстати, довольно круто, я советую всем, кто не знаком с сельдереем, проверить это.

У меня есть конкретный вопрос о функциональности страницы администратора:

Мы используем задачи сельдерея для выполнения вызовов RESTful API сторонним партнерам. Эти вызовы фактически запускаются действием пользователя, поэтому вы можете видеть, как задача сельдерея была бы чрезвычайно полезна в этом случае.

У нас есть пользовательская история о том, как администратор должен иметь возможность повторно отправить обратный вызов в случае сбоя по какой-либо причине. Теперь, если обратный вызов завершается с ошибкой стандартного ответа HTTP, мы используем механизм повторных попыток сельдерея для автоматической повторной отправки их через различные интервалы. Однако эти обратные вызовы могут быть у одного из тысяч партнеров (да, их много), и не все из них будут использовать стандартный код ответа HTTP в качестве ответа об ошибке.

Короче говоря, я не смог найти в Интернете ничего, что указывало бы, что можно повторно отправить задачу сельдерея через интерфейс администратора. Я надеялся, что кто-нибудь сможет пролить свет на это. Кажется, это довольно очевидная часть функциональности, и если такой функциональности нет, я уверен, что для этого есть веская причина. Я был бы рад, если бы не было способа сделать это, если бы кто-то мог объяснить причину. Просто интересно узнать больше о внутренней работе сельдерея.

Спасибо всем! Извините за мою многословность, иногда я склонен бродить.

1 Ответ

2 голосов
/ 23 августа 2011

Вы можете попробовать два подхода,

1: Небольшой взлом в модели:

Вы можете использовать логическое поле и назвать его как celery_retry, а в моделях сохранитьметод сделать что-то вроде этого.

def save(self, *args, **kwargs):
    if self.celery_retry and self.user.is_superuser():
          celery_task.apply_async()
    self.celery_retry = False
    super(MyModel, self).save(*args, **kwargs)

Это просто идея, вы можете сами определить, как и когда отправлять задание сельдерея обратно.

2: Расширить шаблон администратора:

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

...