Los trabajos delayed_job de larga ejecución permanecen bloqueados después de reiniciar Heroku

Cuando se reinicia un trabajador Heroku (ya sea en comando o como resultado de un despliegue), Heroku envíaSIGTERM al proceso de trabajo. En el caso dedelayed_job, laSIGTERM la señal es capturada y luego el trabajador deja de ejecutar después de que el trabajo actual (si lo hubiera) se haya detenido.

Si el trabajador tarda demasiado en terminar, Heroku enviaráSIGKILL. En el caso dedelayed_job, esto deja un trabajo bloqueado en la base de datos que no será recogido por otro trabajador.

Me gustaría asegurarme de que los trabajos terminen (a menos que haya un error). Dado eso, ¿cuál es la mejor manera de abordar esto?

Veo dos opciones. Pero me gustaría obtener otra entrada:

Modificardelayed_job para dejar de trabajar en el trabajo actual (y liberar el bloqueo) cuando recibe unaSIGTERM.Descubra una manera (programática) de detectar trabajos bloqueados huérfanos y luego desbloquearlos.

¿Alguna idea?

Respuestas a la pregunta(6)

Su respuesta a la pregunta