Заводной режим в очереди ActiveJob фоновых заданий

Запуск Rails 4.2.0, поэтому я использую ActiveJob с Sidekiq. Мне нужно вызывать регулярно запланированные фоновые задания, поэтому я надеюсь использовать Clockwork, но я не видел примеров того, как использовать его с 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

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

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