我已经建立了一个Measurement
基于MeasurementSetting
s 运行 s 的系统。每个设置都定义了一个使用ice_cube
(以及一些其他测量属性)的计划。我可以为每个设置编辑此时间表,然后使用以下内容轮询下一次发生的事件:
def next_occurrences
schedule.occurrences(Time.now + 1.day)
end
这给了我一组时间戳,什么时候应该有Measurement
.
现在,我还安装了 Sidekiq,我可以使用MeasurementWorker
. 为此,我只需创建一个空Measurement
记录,将其与其设置相关联,然后perform_async
(或perform_at(...)
)此工作人员:
class MeasurementWorker
include Sidekiq::Worker
sidekiq_options retry: 1, backtrace: true
def perform(measurement_id)
Measurement.find(measurement_id).run
end
end
缺少的是我需要根据设置的时间表创建空测量。但是我该怎么做呢?
假设我有以下数据:
MeasurementSetting
ID 为 1,每日计划在 12:00 PMMeasurementSetting
使用 ID 2,每小时安排一个完整的小时(12:00 AM、01:00 AM 等)
现在我需要:
- 创建一个
Measurement
使用设置 1,每天 12:00 - 每隔整小时创建一个
Measurement
使用设置 2 的 - 打电话给工人进行这些测量
但是怎么做?
我应该每分钟检查一次,是否有MeasurementSetting
定义为now发生,然后创建空Measurement
记录,然后使用 Sidekiq 以特定设置运行它们?
Measurement
或者我应该提前生成带有它们的设置的空记录,并以这种方式安排它们?
实现这一目标的最简单方法是什么?