6

Rails 3 プロジェクトに Resque を追加しました。DB との間で読み書きを行うジョブを作成しました。

問題は、"Post Load (0.5ms) SELECT "posts".* FROM "posts"" などの SQL クエリ ログがターミナルに表示されなくなったことです。また、設定した Rails.logger メッセージも表示されません。

さらに別のリクエスト (単純な更新) を行うと、ロガー メッセージと SQL クエリ ログが突然表示されます。

何が起こっているのでしょうか?ありがとう

4

3 に答える 3

4

Rails はすぐにログ ファイルに書き出すわけではありません。ファイルをフラッシュする前に、一定量の行が経過するのを待ちます。development.rbこれをorファイルに追加することで、Rails に常にログをフラッシュするように指示できapplication.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

于 2011-06-28T15:11:41.660 に答える
2

あるプロジェクトで同じ問題が発生しました。さらに、すべての Resque メッセージを別のログ ファイルにも記録したいと考えました。

ブログ投稿「Resque ワーカーの即時ログ メッセージを有効にする」では、別のファイルへの即時ログ記録を有効にするコード サンプルを見つけることができます。

于 2013-07-01T13:59:24.013 に答える
0

Resqueは、本番モードでログをフラッシュしません(ジョブが1000行を超えるログを生成している場合を除く)。

生成されたログのすべての行をフラッシュする必要があります。私はファイルlib/tasks /resque.rakeでresqueのみを設定します:

task "resque:setup" => :environment do
  Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 }
end
于 2011-08-05T14:09:52.170 に答える