2
我正在與第一次延遲工作,我沒有任何運氣得到它的工作,我不明白爲什麼。工作排隊,但從不執行。它確實從數據庫中刪除,所以工作人員似乎正在處理它,但它並沒有運行看起來的執行方法。延遲的工作職位沒有執行
我已經設置了以下initalizer:
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
這種模式是從我的控制器稱爲像這樣:
Service.new.start_updating!(params)
我唯一的猜測是,我稱爲延遲:: Job.enqueue錯誤,但這似乎是基於我讀過的所有內容應該如何完成的。
如果沒有指定隊列,它不會起作用。我不限制隊列。出於測試目的,該工作人員以'bundle exec rake jobs:work'開始。所有日誌顯示在工人啓動時爲1行,停止時爲1。沒有什麼中間。 – Eugene 2012-03-13 19:23:50
嘗試使用ActiveRecord查詢的rails日誌。你能看到DJ投票嗎?還有,這個工作還在數據庫中嗎? – betamatt 2012-03-13 19:26:57
延遲工作肯定是輪詢,這裏是日誌片段:https://gist.github.com/fb05ccb37abd42c08801。作業在「運行」後從數據庫中刪除,但代碼從未執行。它像DJ一樣在看着這個工作,然後忽略它。 – Eugene 2012-03-13 19:30:44