Мы используем Rails 5.0.2 и ActiveJobs в AWS Beanstalk с SQS в качестве бэкэнда с гемом active_elastic_job .
У нас есть задание, определенное следующим образом:
class MyJob < ActiveJob::Base
rescue_from(StandardError) do |exception|
self.class.set(:wait => 1.minutes).perform_later
end
def perform
MyLongTask.run
end
end
Мы столкнулись с тем, что при уничтожении одного экземпляра в рабочей среде (из-за автоматического масштабирования или чего-то еще) rescue_from
не выполняется и задание не отправляется обратно в очередь.
Как можномы фиксируем момент, когда экземпляр был вызван для уничтожения, чтобы мы могли изящно отреагировать и подвести итоги, прежде чем мой процесс действительно будет убит?(если возможно)
Обновление
Я пытаюсь это
class MyJob < ActiveJob::Base
def perform
begin
sleep(100)
rescue SignalException => e
# send signal to some log place
raise e
end
end
end
Но журнал никогда не отправляется не тогда, когда я прекращаю экземпляр, ни когдаЯ убиваю процесс пума с $ restart puma