Задержка задания не выполняется - PullRequest
2 голосов
/ 13 марта 2012

Я впервые работаю с отложенной работой, и мне не повезло заставить ее работать, и я не понимаю, почему.Задание ставится в очередь, но никогда не выполняется.Тем не менее, он удаляется из базы данных, поэтому работник, кажется, обрабатывает его, но, похоже, он никогда не запускает метод выполнения.

Я настроил следующий инициализатор:

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

Нет этого кодакогда-либо бежит.Я попытался добавить отладочный код в метод execute, и он никогда не будет выполнен, поэтому определенно что-то происходит.Я вызываю задание из модели, подобной этой:

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, но, похоже, именно так и должно быть сделано на основе всего, что я прочитал.

1 Ответ

2 голосов
/ 13 марта 2012

Это может произойти, если ди-джей не может десериализовать работу по какой-либо причине, так как работник вынудит работу потерпеть неудачу.Похоже, это не регистрируется по умолчанию.Попробуйте отключить неудачное удаление задания. Delayed :: Worker.destroy_failed_jobs = false и проверьте, есть ли ошибка.

...