2010-02-03 108 views
2

我正在經歷一些奇怪的問題,其中我的delayed_jobs在生產中失敗。最後我把它縮小到記錄器。如果我註釋掉我的日誌函數調用,一切正常。但是,如果我嘗試登錄,我得到這個在delayed_job的處理程序:日誌在延遲作業的生產中不起作用

--- !ruby/struct:Delayed::PerformableMethod 
object: AR:User:1 
method: :load_and_update_without_send_later 
args: [] 

| closed stream 
/opt/ruby/lib/ruby/1.8/logger.rb:504:in `write' 
/opt/ruby/lib/ruby/1.8/logger.rb:504:in `write' 
/opt/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/opt/ruby/lib/ruby/1.8/logger.rb:496:in `write' 
/opt/ruby/lib/ruby/1.8/logger.rb:326:in `add' 
/opt/ruby/lib/ruby/1.8/logger.rb:374:in `info' 
/home/rails/myapp.com/releases/20100203203031/app/models/gmail.rb:35:in `log' 

我的記錄是這樣的:

@@error_log_file = File.open("#{RAILS_ROOT}/log/error.log", 'a') 
@@error_log_file.sync = true 
def log(msg) 
    msg.each do |line| 
    line = "#{Time.now.strftime('%H:%M:%S')} #{line}" 
    @@error_log_file.info(line) # this is line 35 where it's failing 
    puts line 
    end 
end 

如果我註釋掉行「@@ error_log_file.sync =真」 ,它也可以。

這是一個延遲的工作問題,或者它可能與我的日誌目錄是一個符號鏈接(由標準capistrano部署設置)有關嗎?

也沒有什麼被寫入我的error.log文件,沒有什麼被寫入delayed_job.log。完全難倒...

+0

因此,在做了更多的測試後,它看起來像「config.cache_classes = true」是導致這些錯誤發生的生產環境設置。這是否給任何人新鮮的想法,爲什麼發生?即使使用config.cache_classes = false,delayed_job也不會寫入生產環境中的log/delayed_job.log。 – 2010-02-04 01:29:20

回答

5

伍迪·彼得森發現這裏的問題:http://groups.google.com/group/delayed_job/browse_thread/thread/f7d0534bb6c7c83f/37b4e8ed7bfaba42

的問題是:

DJ是使用Rails的緩衝日誌中生產,並刷新緩衝區沒有被觸發出於某種原因(唐」 t知道它是否被緩衝區大小刷新或在請求後顯式刷新)。

臨時修復(信貸對拿菲爾普斯)是:

當在生產中所緩衝的日誌被設置爲1000 auto_flushing值,這意味着刷新不被調用,直到1000條消息已記錄。假設你正在使用collectiveidea的delayed_job分支,你可以通過在記錄器在第64行初始化之後在command.rb中將auto_flushing設置爲一個更合理的值來解決這個問題。I.E.

延遲:: Worker.logger = Rails.logger

延遲:: Worker.logger.auto_flushing = 1#或完全不管

對我的作品!

+2

哪些版本的Ruby/RoR可以使用它?在ruby 1.9.2和rails 3.2.8上,我得到'undefined method'auto_flushing'=' – 2012-12-03 20:06:41

0

它看起來像你正在嘗試登錄到一個封閉的文件。你有沒有考慮過試用SyslogLogger的寶石?

這裏的an article on how to use it with rails,這應該有助於你開始。

+0

謝謝,檢查出來。這裏我只是使用記錄器。但我不認爲它應該是一個封閉的文件,因爲我明確地打開它..加上它在開發模式下工作正常。另外delayed_job並不是將它寫入日誌記錄/ delayed_job.log - 這是我不能修改的東西。 – 2010-02-03 22:43:25

0

我有類似的問題。正在重寫記錄在collectiveidea分叉中 - 有關更多信息,請參閱this issue。也許試試最新版本,看看是否能爲你解決這個問題。