Длительные отложенные _задания остаются заблокированными после перезапуска на Heroku

Когда рабочий процесс Heroku перезапускается (либо по команде, либо в результате развертывания ), Heroku отправляет SIGTERMв рабочий процесс. В случае delayed_jobсигналSIGTERMперехватывается , а затем рабочий процесс прекращает выполнение после текущего задания (, если какое-либо )остановлено.

Если рабочий процесс занимает слишком много времени, Heroku отправит SIGKILL. В случае delayed_jobэто оставляет заблокированное задание в базе данных, которое не может быть выбрано другим рабочим.

Я хотел бы гарантировать, что задания в конечном итоге завершатся (, если не возникнет ошибка ). Учитывая это, как лучше всего подойти к этому?

Я вижу два варианта. Но я хотел бы получить другой ввод:

  1. Изменить delayed_job, чтобы прекратить работу над текущим заданием (и снять блокировку ), когда он получит SIGTERM.
  2. Разработайте (программный )способ обнаружения потерянных заблокированных заданий, а затем разблокируйте их.

Есть мысли?

14
задан dukedave 26 September 2012 в 17:05
поделиться