ruby-on-rails - 使用 Clockwork/Delayed_Job/ActiveJob 安排每 5 分钟运行一次(轮)

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

我正在读取一些传感器值,我想安排重复作业以便每隔 :00、:10、:15、:20、:25、:30、:35 等重复一次。

我在 Rails 5 中使用 clockwork/delayed_job/activeJob & foreman,我能够检索值并将值存储到数据库中。

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

时钟.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

我错过了什么?

最佳答案

你帮了我!在描述下方:

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

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

Delayed::Job.enqueue SensorJob.new.perform

代替:

Delayed::Job.enqueue SensorJob.new

你必须使用SensorJob的方法perform!

祝你好运!

关于ruby-on-rails - 使用 Clockwork/Delayed_Job/ActiveJob 安排每 5 分钟运行一次(轮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178772/

相关文章:

ruby-on-rails - ruby + 正则表达式 : Validate email domain

ruby-on-rails - delayed_job gem 可以在 Rails 之外使用吗?

ruby-on-rails - Rails ActiveJob - 在 ActionMailer::DeliveryJob 中处理异常的好方法是什么

ruby-on-rails - Sidekiq 作业正在排队,但未得到处理。所有作业都卡在排队中

ruby-on-rails - Assets 预编译正常,但尝试获取文件时出现 404

ruby-on-rails - 开发环境测试并非 100% 与 Rails 中的暂存/生产兼容

ruby-on-rails - Mountain Lion - LibXML 和 Nokogiri

ruby-on-rails - Dockerizing 延迟的作业

ruby-on-rails - 延迟作业 Rake 任务失败

ruby-on-rails - 如何在不加载整个rails环境的情况下将作业排队到ActiveJob?