簡體   English   中英

調試Delayed_Jobs

[英]Debugging Delayed_Jobs

我正在調試延遲的工作類。 首先,我添加了config / initializers / delayed_job_config,將我的日志記錄移動到我的log / production.rb文件中。

Delayed::Job.destroy_failed_jobs = false
Delayed::Worker.logger = Rails.logger

然后在我在實際文件中的實際文件中

class TestJob < Struct.new()
 logger.debug("test logging")
end

日志中沒有顯示任何內容。 有人有主意嗎?

我很幸運將錯誤的回溯歸結為電子郵件,這至少給了我一些關於延遲工作失敗的時間/方式的背景:

這是一個例子:

result = Delayed::Job.work_off
  unless result[1].zero?
    ExceptionMailer.deliver_exception_message("[Delayed Job Failed] Error id: #{Delayed::Job.last.id}", Delayed::Job.last.last_error)
  end

如果你只是想為你的延遲::工作任務編寫測試,這就是我采取的方法。 我將根據各種場景的期望來完成執行任務,然后測試Delayed :: Job如何處理這些結果。 以下是我每晚使用Delayed :: Job與遠程CMS同步的示例。

it "should sync content from the remote CMS" do
CMSJobs::Sync.module_eval do
  def perform
    url.should == "http://someurl.com/tools/datafeed/resorts/all"
    Resort.sync_resorts!([{'id' => 1, 'name' => 'resort foo'}, { 'id' => 2, 'name' => 'resort bar' }])
  end
end

lambda do
  Resort.sync_all!
end.should change(Delayed::Job, :count)

lambda do
  Delayed::Job.work_off
end.should change(Resort, :count).by(2)

# It should now delete a resort if it doesn't appear in the next CMS feed.
lambda do
  Resort.sync_resorts!([{ 'id' => 2, 'name' => 'resort bar' }])
end.should change(Resort, :count).by(-1)

結束

您是否試圖將其縮小到延遲作業是否會被解雇或記錄器配置不適合您的問題? 如果用puts替換logger.debug調用怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM