2013-04-26 5 views
9

Мне нужно перезаписать Delayed::Worker.max_attempts для одного конкретного задания, которое я хочу повторить много раз. Кроме того, я не хочу, чтобы следующее запланированное время определялось экспоненциально (из документов: 5 секунд + N ** 4, где N - количество попыток).Задержка задания: сконфигурируйте run_at и max_attempts для определенного задания

Я не хочу перезаписывать настройки Delayed::Worker и влиять на другие задания.

Моя работа уже является настраиваемой работой (я обрабатываю ошибки определенным образом), так что это может быть полезно. Любые указатели на то, как это сделать?

ответ

15

Я понял, просмотрев delayed_job Исходный код. Это не документировано нигде в своих документах.

Вот что я сделал:

class MyCustomJob < Struct.new(:param1, :param2) 
    def perform 
    # do something 
    end 

    # attempts and time params are required by delayed_job 
    def reschedule_at(time, attempts) 
    30.seconds.from_now 
    end 

    def max_attempts 
    50 
    end 
end 

Надеется, что это поможет кому-то в будущем.

+1

аргументы в '' 'reschedule_at''' должны быть включены: https://github.com/collectiveidea/delayed_job/blob/95deddc99af84e652dd865a292e959db4b0a1179/lib/delayed/backend/base.rb#L133 – sufleR

+0

Обновлено. Спасибо @sufleR! – gylaz

+0

У меня есть одно сомнение, как мы проверяем, действительно ли попытка выполнить задачу не работает? – gates

Смежные вопросы