运行Rails 4.2.0所以我使用的是带有Sidekiq后端的ActiveJob。我需要调用定期安排的后台工作,所以我希望使用发条,但我还没有看到任何如何在ActiveJob上使用它的例子。
这是我的lib / clock.rb,基于Clockwork Github示例:
require 'activejob'
module Clockwork
handler do |job, time|
puts "Running #{job}, at #{time}"
ProductUpdateJob.perform_later
end
every(30.seconds, 'ProductUpdateJob.perform_later')
end
更新
我能够让它适应我的情况,但我对解决方案并不完全满意,因为我不得不加载整个环境。我只想要最低限度来运行ActiveJobs。
Dir["./jobs/*.rb"].each {|file| require file }
require 'clockwork'
require './config/boot'
require './config/environment'
#require 'active_job'
#require 'active_support'
module Clockwork
handler do |job, time|
puts "Running #{job}, at #{time}"
#send("#{job}")
#puts "#{job}".constantize
"#{job}".constantize.perform_later
end
every(10.seconds, 'ProductUpdateJob')
end
答案 0 :(得分:2)
这是一个工作版本
require 'clockwork'
require './config/boot'
require './config/environment'
module Clockwork
handler do |job, time|
puts "Running #{job}, at #{time}"
"#{job}".constantize.perform_later
end
every(10.seconds, 'ProductUpdateJob')
end
答案 1 :(得分:2)
这是可能的,但它没有redis / job后端配置的上下文。你总是可以在配置/初始化器中需要一个配置sidekiq和redis的文件。这是您需要的最低要求:
require 'clockwork'
require 'active_job'
ActiveJob::Base.queue_adapter = :sidekiq
Dir.glob(File.join(File.expand_path('.'), 'app', 'jobs', '**')).each { |f| require f }
module Clockwork
every(1.minute, 'Do something') { SomeJob.perform_later }
end