Rails 3.1で資産パイプライン(スプロケット)メッセージのロギングを無効にする方法は?
-
26-10-2019 - |
質問
スプロケットは、レール3.1(RC1)の下でデフォルトで(開発)ログでかなり冗長になる傾向があります。
Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/application.css.scss (5ms) (pid 6303)
Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/default.css.scss (15ms) (pid 6303)
...
Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Served asset /default/header_logo.gif - 304 Not Modified (7ms) (pid 6303)
Served asset /default/header_bg.gif - 304 Not Modified (0ms) (pid 6246)
Served asset /default/footer_bg.gif - 304 Not Modified (49ms) (pid 6236)
...
冗長性のレベルを下げるか、それを完全に無効にしたいと思います。どちらにも構成ラインを追加して、ロギングの冗長性を無効にしたり減らしたりするクリーンな方法があると仮定しています environment.rb
また development.rb
に似ている config.active_record.logger = nil
ActiverCord SQLステートメントを沈黙させます。
解決
次のコードをに配置します config/initializers/quiet_assets.rb
if Rails.env.development?
Rails.application.assets.try(:logger=, Logger.new('/dev/null'))
Rails::Rack::Logger.class_eval do
def call_with_quiet_assets(env)
previous_level = Rails.logger.level
Rails.logger.level = Logger::ERROR if env['PATH_INFO'] =~ %r{^/assets/}
call_without_quiet_assets(env)
ensure
Rails.logger.level = previous_level
end
alias_method_chain :call, :quiet_assets
end
end
更新:今ではRails 3.2でも動作します(以前の試行修正 before_dispatch
今、私たちはルートラックに行きます call
代わりは)
更新:適切なラックミドルウェアソリューション(壊れやすい代わりに alias_method_chain
)@macournoyerから https://github.com/rails/rails/issues/2639#issuecomment-6591735
他のヒント
を見てみましょう https://github.com/evrone/quiet_assets そして、それをあなたのgemfileに含めるだけです
レイジーのために: gem 'quiet_assets', group: :development
Rails 3.2の場合、追加 config.assets.logger = false
開発環境構成ファイルに、通常は config/environments/development.rb
。見る #4512
2つのことで十分です:
1. config.assets.debug = false
の config/enviroments/development.rb
2. rake assets:precompile
. 以下の@omaのコメントを参照してください。これは必要ありません
それで全部です!
最終的には、そうなるでしょう config.assets.logger = nil
しかし、その部分は現在マスターに突き刺されています(まだ完了していません)
私はそれが醜くて一時的な解決策であることを知っていますが、私はこれを使用します:
テール-f log/development.log | grep -ve 'asset'
多くの人々は、の使用について混乱しています config.assets.logger = false
. 。これがそれがしていることと、それがしていないことです。
によると ソースドキュメント:
設定
config.assets.logger
Falseには、提供される資産の記録がオフになります。
しかし、これはおそらくあなたがそうであると思うものではありません。 スプロケットの「サービング」ログのみを無効にします, 、Rails ActionPack要求ログではありません。 Railsメンテナーはこれをここではっきりと説明しています:https://github.com/rails/rails/issues/4569#issuecomment-3594500
リンクから例を挙げると、このようなログは無効になっています。
Asset /jquery.isotope.js -304修正(0ms)を提供する
しかし、このようなログはそうではありません
2012-01-20 23:16:46 -0500で127.0.0.1の "/sassets/jquery.isotope.js?body = 1"を開始
config.assets.quiet = true
これが最新の方法です。
development.rb in config/環境では、行が見つかります config.assets.debug = true
. 。に切り替えます false
そして、資産の負荷出力のほとんどはなくなります。私のシステムでは、application.cssと.jsの2つの要求のみが残ります。
Rails.application.assets.logger = Logger.new(RUBY_PLATFORM =~ /(win|w)32$/ ? "NUL" : "/dev/null")
Rails::Rack::Logger.class_eval do
def call_with_quiet_assets(env)
previous_level = Rails.logger.level
Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
call_without_quiet_assets(env).tap do
Rails.logger.level = previous_level
end
end
alias_method_chain :call, :quiet_assets
end
@choonkeatが追加されたのと同じコードです。 Windowsの下でも仕事をするだけです。
config/environments/development.rbで追加してください:
config.assets.debug = false
config.assets.logger = false
これはあなたの問題に役立ちます。
ログレージ Win-It It Killの迷惑なロガーのデフォルトは、ボックスから外出します(例:ロギング資産、部分的なレンダリングのロギング)。特定のアイテムを追加/削除する場合はカスタマイズ可能です。
以下のリンクソリューションが役立ちます:
https://github.com/evrone/quiet_assets
また、以下のように、私にとっては正常に機能しています
3.1(のみ)(3.2ブレークの前)
app\config\initializers\quiet_assets.rb
Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
def before_dispatch_with_quiet_assets(env)
before_dispatch_without_quiet_assets(env) unless env['PATH_INFO'].index("/assets/") == 0
end
alias_method_chain :before_dispatch, :quiet_assets
end
3.2 Rails - Rack root tap approach
app\config\initializers\quiet_assets.rb
Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
def call_with_quiet_assets(env)
previous_level = Rails.logger.level
Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
call_without_quiet_assets(env).tap do
Rails.logger.level = previous_level
end
end
alias_method_chain :call, :quiet_assets
end
構成/環境に追加 config.log_level = :error
変更する.RBファイルに。これにより、ログ設定がエラーのみに変更されます。これが役立ったことを願っています!