【发布时间】:2018-10-05 22:40:27
【问题描述】:
我很清楚为什么会发生这种情况(两个 ruby 运行时),这对于以前没有阅读 RS 常见问题解答或在 SO 上搜索过的人来说是一个常见问题,但我花了几天时间尝试许多规定的解决方案,但我的 rufus-scheduler 继续调用两次。
这仅发生在生产环境中,在 Heroku 上运行 Rails 5.0.6、Puma 服务器。
这是我的 scheduler.rb:
require 'rufus-scheduler'
a_scheduler = Rufus::Scheduler.new(:lockfile => ".rufus-scheduler-a.lock")
b_scheduler = Rufus::Scheduler.new(:lockfile => ".rufus-scheduler-b.lock")
unless defined?(Rails::Console) || File.split($0).last == 'rake' || !Rails.env.production?
a_scheduler.cron '0 21 * * *', overlap: false, blocking: true do
MySidekiqWorker.perform_async unless a_scheduler.down?
end
b_scheduler.every '1h', overlap: false, blocking: true do
MyOtherSidekiqWorker.perform_async unless b_scheduler.down?
end
end
我尝试了锁定文件,配置了我自己的 scheduler_lock,.every 和 .cron 的不同参数。此外,似乎即使我有overlap: false 和blocking: true,MyOtherSidekiqWorker 的新实例仍会在一个仍在运行时被调用。
我一定遗漏了一些明显的东西,谢谢你的帮助。
【问题讨论】: