【问题标题】:Delayed job jobs not executing延迟作业作业未执行
【发布时间】:2012-03-29 23:32:42
【问题描述】:

我是第一次处理延迟的工作,我没有任何运气让它工作,我不明白为什么。作业排队,但从不执行。虽然它确实从数据库中删除了,所以工作人员似乎正在处理它,但它从来没有运行它看起来的 perform 方法。

我已经设置了以下初始化器:

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

这些代码都没有运行过。我尝试将调试代码添加到 perform 方法中,但它永远不会被执行,所以肯定有什么事情发生了。我从这样的模型中调用工作:

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

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

Service.new.start_updating!(params)

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 在没有指定队列的情况下,它不会工作更多或更少。我没有限制队列。用于测试目的的工作程序以bundle exec rake jobs:work 开头。所有日志显示的是工人启动时的 1 行,停止时的 1 行。中间什么都没有。
    • 试试你的 Rails 日志中的 ActiveRecord 查询。你能看到 DJ 投票吗?另外,作业还在数据库中吗?
    • 延迟作业肯定是轮询,这里是日志 sn-p:gist.github.com/fb05ccb37abd42c08801。作业在“运行”后从数据库中删除,但代码永远不会执行。就像 DJ 看着工作然后忽略了它。
    • 如果 DJ 由于任何原因无法反序列化作业,则可能会发生这种情况,因为工作人员会强制作业永久失败。默认情况下,这似乎不会被记录。尝试禁用失败的作业删除Delayed::Worker.destroy_failed_jobs = false 并查看是否有错误。
    • 这向我显示了错误。对于应该工作的 gem,它会出现未初始化的常量错误。在工作中加载宝石的方法是对还是错?我以为它是在工作人员启动时从捆绑包中加载的,但似乎并非如此。我也尝试在工作本身中 require 它,仍然给出同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2023-03-22
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多