Я использую resque на Heroku, который время от времени прерывает ваши задания с помощью SIGTERM.Как обращаться с SIGTERM с resque-статусом в сложных заданиях
До сих пор я перевалено это с простой:
def process(options)
do_the_job
rescue Resque::TermException
self.defer options
end
Мы начали использовать Resque-статус, чтобы мы могли следить за работу, но выше метод явно нарушает, что как работа будет шоу завершено, когда на самом деле оно отложено на другую работу.
Мое настоящее мышление заключается в том, что вместо того, чтобы откладывать текущее задание в режиме resque, должно быть другое задание, которое перезагружает задания, которые потерпели неудачу из-за SIGTERM.
Хитрость приходит в том, что некоторые рабочие места являются более сложными:
def process(options)
do_part1 unless options['part1_finished']
options['part1_finished']
do_part2
rescue Resque::TermException
self.defer options
end
Простое удаление спасение и просто Повторная попытка эти рабочие места будут вызывать исключение, когда do_part1 получает повторяется.