2015-01-18 6 views
3

Running Rails 4.2.0, поэтому я использую ActiveJob w/Sidekiq. Мне нужно вызывать регулярно запланированные фоновые задания, поэтому я надеюсь использовать Clockwork, но я не видел примеров того, как использовать его с ActiveJob.Clockwork to queue ActiveJob background jobs

Вот мой Lib/clock.rb построена на примере Заводной 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 

Update:

я смог его работать на моей ситуации, но я не совсем удовлетворены решением, так как мне приходится загружать всю среду. Я бы просто хотел, чтобы минимальный минимум запускал ActiveJob.

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 

ответ

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

Это возможно, но это не будет иметь никакого контекста вашего Redis/конфигурации серверной работы. Вы всегда можете потребовать файл в config/initializers, который настраивает 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 

 Смежные вопросы

  • Нет связанных вопросов^_^