2011-06-28 88 views
6

我已將Resque添加到我的Rails 3項目中。我創建了一個從DB讀取/寫入一些內容的工作。記錄Resque的問題

問題是我沒有看到SQL查詢日誌,如「Post Load(0.5ms)SELECT」posts「。* FROM」posts「」in the terminal again。我也沒有看到我設置的任何Rails.logger消息。

當我發出另一個請求(簡單刷新)時,記錄器消息和SQL查詢日誌突然出現。

任何想法可能會發生什麼?謝謝

回答

4

Rails不會立即寫入日誌文件,它會在刷新文件之前等待一定數量的行。你可以告訴Rails總是加給你的development.rbapplication.rb文件清空日誌...

config.logger.auto_flushing = true 

永遠只能做到這一點的發展,從來沒有這種生產,因爲它會殺了你的I/O 。

你也可以做到這一點與需求...

Rails.logger.flush 

這裏API文檔...

http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#method-i-auto_flushing-3D

+1

ActiveSupport :: BufferedLogger#auto_flushing現在已在Rails 3.2上被棄用。說明是在底層文件句柄上設置同步級別,或者調整文件系統。 FS緩存現在控制着沖洗。 file = File.open('foo.log','w') file.sync = true ActiveSupport :: BufferedLogger.new文件 – plainjimbo

+0

格式化非常麻煩,你可以在文檔「棄用」部分 - https://github.com/lifo/docrails/blob/master/railties/guides/source/3_2_release_notes.textile – plainjimbo

+0

@Jimbo - 該棄用郵件的問題是,我不知道「設置底層文件句柄同步級別「的含義。 –

0

Resque將不刷新記錄的生產模式(除非你的作業正在生成超過1000行日誌)。

您將不得不刷新生成的每一行日誌。我只配置resque與文件的lib /任務/ resque.rake:

task "resque:setup" => :environment do 
    Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 } 
end 
2

我們經歷了同樣的問題,在我們的項目之一。此外,我們還想將所有Resque消息記錄到單獨的日誌文件中。

在博客文章Enable immediate log messages of resque workers中,可以找到一個代碼示例以啓用立即記錄到單獨的文件。