Lang laufende delayed_job-Jobs bleiben nach einem Neustart von Heroku gesperrt

Wenn ein Heroku-Mitarbeiter neu gestartet wird (entweder auf Befehl oder als Ergebnis einer Bereitstellung), sendet HerokuSIGTERM zum Arbeitsprozess. Im Falle vondelayed_job, dasSIGTERM Signal wird abgefangen und der Worker stoppt dann die Ausführung, nachdem der aktuelle Job (falls vorhanden) gestoppt wurde.

Wenn der Arbeiter zu lange braucht, um fertig zu sein, sendet HerokuSIGKILL. Im Falle vondelayed_jobDadurch verbleibt ein gesperrter Job in der Datenbank, der nicht von einem anderen Mitarbeiter abgeholt wird.

Ich möchte sicherstellen, dass Jobs eventuell beendet werden (es sei denn, es liegt ein Fehler vor). Was ist angesichts dessen der beste Weg, dies zu erreichen?

Ich sehe zwei Möglichkeiten. Ich hätte aber gerne andere Inputs:

Änderndelayed_job um die Arbeit an dem aktuellen Job zu beenden (und die Sperre aufzuheben), wenn einSIGTERM.Finden Sie eine (programmatische) Möglichkeit, verwaiste gesperrte Jobs zu erkennen und sie dann zu entsperren.

Irgendwelche Gedanken?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage