Ich habe Resque auf Heroku verwendet, die von Zeit zu Zeit Ihre Jobs mit einem SIGTERM unterbrechen wird.Wie man SIGTERM mit resque-status in komplexen Jobs behandelt
Bisher habe ich dies mit einem einfachen Handhabung:
def process(options)
do_the_job
rescue Resque::TermException
self.defer options
end
Wir begonnen haben resque-Status mit, so dass wir den Überblick über Arbeitsplätze halten, aber die Methode oben offensichtlich bricht, dass als der Job Show abgeschlossen, wenn es tatsächlich auf einen anderen Job verschoben wurde.
Mein derzeitiges Denken ist, dass, anstatt den aktuellen Job in resque zu verzögern, es einen anderen Job geben muss, der Jobs neu einreiht, die aufgrund von SIGTERM fehlgeschlagen sind.
Der Trick kommt, dass einige Arbeitsplätze sind komplizierter:
def process(options)
do_part1 unless options['part1_finished']
options['part1_finished']
do_part2
rescue Resque::TermException
self.defer options
end
einfach die Rettung zu entfernen und einfach erneut versuchen diese Arbeitsplätze würden eine Ausnahme verursachen, wenn do_part1 wiederholt wird.