从clock.rb文件中获取后台作业列表

时间:2017-11-21 11:56:14

标签: ruby-on-rails ruby ruby-on-rails-4

我需要通过控制器从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

在我的控制器中如何获得工作清单,任何想法如何完成这项工作?

1 个答案:

答案 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?)以使其成为库的官方功能。