我无法确切地找到如何设置我的重复规则以每 2 小时启动一次工作。目前我的工作是每天凌晨 3 点运行(我认为)在我的 Sidekiq worker 类中使用这样的东西:

recurrence do
  daily.hour_of_day(3)
end

每 2 小时或每小时运行一次的最佳方法是什么?我相信,这在引擎盖下使用了 icecube gem。

最佳答案

你试过 hourly(2) 吗?

recurrence do
  hourly(2)
  # if you want to specify the exactly minute or minutes
  # `minute_of_hour(30, ...)`
  # hourly(2).minute_of_hour(30)
end

它在 icecube's README 中,但我还没有尝试过。

你也可以这样做:
recurrence do
  # set recurrence to [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
  daily.hour_of_day(*(0..23).to_a.select { |hour_of_day| hour_of_day.even? })
end

但恕我直言 hourly(2) 是更好的选择。

没有 Sidetiq 的另一个选择是在结束 self.perform_in(2.hours) 方法之前添加 perform
def perform
   # ...
   self.class.perform_in(2.hours)
end

更新:

https://github.com/tobiassvn/sidetiq/wiki/Known-Issues



因此,最好使用更明确的方式 :
recurrence { hourly.minute_of_hour(0, 15, 30, 45) }

10-05 20:07