Nach einigen Tests scheint es, dass Sie benutzerdefinierte bezogen auf den jeweiligen Job Fehlermeldung mit folgendem Ansatz Umschuldung tun können:
eine Instanzvariable in den Job definieren die benutzerdefinierte Wiederholungsverzögerung zu halten. Diese Variable wird von allen anderen Variablen in die Datenbank (oder jedes andere DelayedJob-Backend) serialisiert, d. H. Ihr Status wird zwischen Jobläufen beibehalten.
Im error
Haken, die Verzögerung auf einen beliebigen Wert auf der Grundlage des Fehlers, die Sie im exception
Parameter bekommen (das ein Exception
Objekt).
Verwenden Sie diese benutzerdefinierte Verzögerung in der reschedule_at
Methode.
Die Lösung nutzt die Tatsache, dass die Methode reschedule_at
is called after the error
hook. Siehe das folgende Beispiel:
class MyJob
attr_accessor :retry_delay
def initialize
self.retry_delay = 5 # default retry delay
end
def error(job, exception)
# set up a different the delay time on a specific error
if exception.is_a? NameError
self.retry_delay = 10
end
end
def reschedule_at(current_time, attempts)
current_time + retry_delay.seconds
end
end