ruby - 延迟作业作业未执行

标签 ruby ruby-on-rails-3 delayed-job

我第一次处理延迟的工作,但我没有运气让它工作,我不明白为什么。该作业已排队,但从未执行。但它确实从数据库中删除了,因此工作人员似乎正在处理它,但它似乎从未运行过执行方法。

我设置了以下初始化程序:

require 'delayed/worker'
Dir.glob("./app/jobs/*.rb").each { |f| require f }

Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/dj.log", Rails.logger.level)
module Delayed
  class Worker
    def self.dj_say(text)
      self.logger.info "#{Time.now.strftime('%F %T %z')}: #{text}" 
    end
  end
end

初始化程序可以工作,并且当工作开始/退出时,dj.log 会被写入。

我的工作包括以下内容:

class UpdateServices
  attr_accessor :options
  def initialize(options)
    self.options = options
  end

  def perform
    #Debugging code
    Delayed::Worker.dj_say "starting"
    File.open("tmp/test.txt","w").close
    #End debugging code
    #bunch-o-code-here
    Delayed::Worker.dj_say "completed"
  end
end

这些代码都没有运行过。我尝试将调试代码添加到执行方法中,但它从未被执行,因此肯定发生了一些事情。我从这样的模型中调用该作业:

class Service < ActiveRecord::Base
  def start_updating!(options)
    Delayed::Job.enqueue(UpdateServices.new(options), :priority => 0, :run_at => 30.seconds.from_now, :queue => 'update_services')
  end
end

该模型是从我的 Controller 中调用的,如下所示:

Service.new.start_updating!(params)

我唯一的猜测是我被错误地称为 Delayed::Job.enqueue,但根据我读过的所有内容,这似乎是应该如何完成的。

最佳答案

如果 DJ 出于某种原因无法反序列化作业,则可能会发生这种情况,因为工作线程将强制作业永久失败。默认情况下这似乎不被记录。尝试禁用失败的作业删除 Delayed::Worker.destroy_failed_jobs = false 并查看是否有错误。

关于ruby - 延迟作业作业未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686187/

相关文章:

ruby-on-rails - 如何为法语设置 Rails?

ruby-on-rails - 在 Rails 上运行自定义 rake 任务

ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055)

ruby-on-rails - Errno::ETIMEDOUT:连接超时 - connect(2)

ruby - 生成带有小写字母和数字的唯一随机字符串

ruby-on-rails - 使用 Dokku 在生产服务器中运行旧版本代码的 Rails 延迟作业

ruby-on-rails - 成功发送延迟作业电子邮件后更新用户表

rake - 在后台运行rake任务与使用诸如Delayed Job,Resque或Sidekiq之类的gem有什么区别?

ruby - 。任何?在 case block 内未按预期进行评估

ruby - Heroku - 如何开始工作人员(延迟工作)?