我需要通过控制器从clock.rb文件中获取作业列表。我使用ruby 2.3.3,rails 4.2和clock gem来定义作业。
在我的clock.rb文件中,我的代码是
module Clockwork
handler do |job, time|
Rails.logger.warn "Running #{job}, at #{time}"
end
configure do |config|
config[:logger] = Rails.logger
end
def self.job1?
# ...
end
def self.job2?
# ...
end
end
在我的控制器中如何获得工作清单,任何想法如何完成这项工作?
答案 0 :(得分:0)
我不得不稍微挖掘the source code以找到直接这样做的方法:
# This is the demo file from the gem's README:
require 'clockwork'
module Clockwork
handler do |job|
puts "Running #{job}"
end
every(10.seconds, 'frequent.job')
every(3.minutes, 'less.frequent.job')
every(1.hour, 'hourly.job')
every(1.day, 'midnight.job', :at => '00:00')
end
# Here is a way to then access the defined events:
Clockwork.manager.instance_variable_get('@events').map(&:to_s)
#=> ["frequent.job", "less.frequent.job", "hourly.job", "midnight.job"]
再看看源代码,这个库的工作方式是(例如)当你every(period, job_name)
中调用Clockwork.manager
registers an event时。
但是,请注意:访问私有数据 - 即instance_variable_get('@events')
- 取决于库的内部实现。它不是以这种方式使用的,因此存在实现可能在未来版本的gem中完全改变的风险。
这并不是说“不要这样做”,而是“谨慎地做 ”。如果您计划大量依赖此功能,请考虑分配项目(甚至提交PR?)以使其成为库的官方功能。