使用Clockwork / Delayed_Job / ActiveJob安排每5分钟(圆形)运行

时间:2016-07-04 07:10:06

标签: ruby-on-rails delayed-job rails-activejob clockwork

我正在阅读一些传感器值,我想安排重复工作,以便重复每一个:00,:10,:15,:20,:25,:30,:35等。

我正在使用clockwork / delayed_job / activeJob& Rails 5中的工头,我能够检索并存储数据库的值。

我无法做的是完成每个任务/作业的时间,这意味着它们似乎在一系列中排队,然后立即执行。我可以看到他们可能一次运行5次,而整个任务可能需要几毫秒。

clock.rb

require 'clockwork'
require File.expand_path('../boot', __FILE__)
require File.expand_path('../environment', __FILE__)

module Clockwork
  handler do |job, time|
    puts "Running #{job}, at #{time}"
  end

  every(5.minutes, 'SensorJob') { Delayed::Job.enqueue SensorJob.new, queue: :default }

end

sensor_job.rb

class SensorJob < ActiveJob::Base
  queue_as :default

  def perform
    @temperature = Random.new.rand(20..30)
    @humidity    = Random.new.rand(30..70)
    SensorReading.create(temperature: @temperature, humidity: @humidity)
  end

end

我错过了什么?

1 个答案:

答案 0 :(得分:0)

你帮我了!在描述下面:

every(5.minutes, 'SensorJob') { Delayed::Job.enqueue SensorJob.new, queue: :default }

所以我帮助你!你应该使用:

Delayed::Job.enqueue SensorJob.new.perform

而不是:

Delayed::Job.enqueue SensorJob.new

您必须使用SensorJob的方法perform

祝你好运!!