Я впервые работаю с отложенной работой, и мне не повезло заставить ее работать, и я не понимаю, почему.Задание ставится в очередь, но никогда не выполняется.Тем не менее, он удаляется из базы данных, поэтому работник, кажется, обрабатывает его, но, похоже, он никогда не запускает метод выполнения.
Я настроил следующий инициализатор:
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, но, похоже, именно так и должно быть сделано на основе всего, что я прочитал.