2013-04-26 13 views
9

Potrzebuję zastąpić Delayed::Worker.max_attempts dla jednego konkretnego zadania, które chcę powtórzyć wiele razy. Ponadto nie chcę, aby następny wyznaczony czas był ustalany wykładniczo (z dokumentów: 5 sekund + N ** 4, gdzie N to liczba prób).Praca opóźniona: Skonfiguruj parametry run_at i max_attempts dla określonego zadania

Nie chcę nadpisywać ustawień Delayed::Worker i wpływać na inne zadania.

Moje zadanie jest już zleceniem niestandardowym (obsługuję błędy w określony sposób), więc może to być pomocne. Jakieś wskazówki, jak to zrobić?

Odpowiedz

15

Zorientowałem się, przeglądając kod źródłowy delayed_job. To nie jest udokumentowane nigdzie w ich dokumentach.

Oto co zrobiłem:

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 

Nadzieja to pomaga komuś w przyszłości.

+1

argumenty '' 'reschedule_at''' powinny być przełączane: https://github.com/collectiveidea/delayed_job/blob/95deddc99af84e652dd865a292e959db4b0a1179/lib/delayed/backend/base.rb#L133 – sufleR

+0

aktualizowana. Dzięki @sufleR! – gylaz

+0

Mam jedną wątpliwość, w jaki sposób możemy sprawdzić, czy próba wykonania zadania rzeczywiście nie działa? – gates

Powiązane problemy