fgu*_*len 11 ruby-on-rails amazon-sqs amazon-web-services amazon-elastic-beanstalk rails-activejob
我们使用Rails 5.0.2和ActiveJobs在AWS魔豆与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
Run Code Online (Sandbox Code Playgroud)
我们经历过,当工作环境中的一个实例被杀死(由于自动缩放或某种原因)时,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
Run Code Online (Sandbox Code Playgroud)
但是,当我终止实例时,日志永远不会发送,因为我没有杀死美洲狮进程$ restart puma
通过捕获SIGTERM
信号,您可以在进程终止之前执行任何您想要的清理(您的环境可能会稍后发送SIGKILL
无法捕获的信号)。
Signal.trap(:SIGTERM) {
# perform cleanup here
exit
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
370 次 |
最近记录: |