我在Heroku上有长期工作,而且由于dynos每24小时自动重启一次,我不想让它中断我的一些长期工作(4个多小时)。
理想情况下,我可以以某种方式“倾听”#39;对于SIGTERM,如果作业检测到,它会快速中止循环并退出作业,以便下一个工作人员可以重新运行它。
这是一份样本工作:
class SMSPaymentDueSoonJob
def max_attempts
1
end
def perform
User.find_in_batches(batch_size: 1000) do |users|
#... do complicated work on 500,000 rows here ..
User.where(id: successful_ids).update_all(sms_reminder_sent_at: Time.now.utc)
end
end
end