Trabalhos de longa duração no delayedjob ficam bloqueados após um reinício no Heroku

Quando um trabalhador Heroku é reiniciado (no comando ou como resultado de uma implantação), o Heroku enviaSIGTERM para o processo de trabalho. No caso dedelayed_job, aSIGTERM sinal é capturado e, em seguida, o trabalhador interrompe a execução após a interrupção do trabalho atual (se houver algum).

Se o trabalhador demorar muito para terminar, então Heroku enviaráSIGKILL. No caso dedelayed_job, isso deixa um trabalho bloqueado no banco de dados que não será escolhido por outro funcionário.

Eu gostaria de garantir que os trabalhos acabem (a menos que haja um erro). Dado que, qual é a melhor maneira de abordar isso?

Eu vejo duas opções. Mas gostaria de receber outra entrada:

Modificardelayed_job para parar de trabalhar no trabalho atual (e liberar o bloqueio) quando ele receberSIGTERM.Descobrir uma maneira (programática) de detectar trabalhos bloqueados órfãos e depois desbloqueá-los.

Alguma ideia?

questionAnswers(6)

yourAnswerToTheQuestion