スプロケットは、デフォルトでRails 3.1(RC1)の下の(dev)ログで非常に冗長になる傾向があります。
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)
...
冗長レベルを下げるか、完全に無効にします。 ActiveRecord SQL文を黙らせるenvironment.rb
に似たdevelopment.rb
またはconfig.active_record.logger = nil
のいずれかにconfig行を追加することにより、ロギングの冗長性を無効化または削減するクリーンな方法があると仮定しています。
次のコードを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
が使用されます)
更新:@macournoyerからの適切なRackミドルウェアソリューション(壊れやすいalias_method_chain
の代わり) 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
になりますが、その部分は現在マスター上でスタブ化されています(まだ完了していません)
config.assets.logger = false
の使用について多くの人が混乱しています。ここに、それがすることとしないことを示します。
ソースドキュメント によると:
config.assets.logger
をfalseに設定すると、配信済みアセットのロギングがオフになります。
ただし、これはおそらくあなたが思っているとおりではありません。 スプロケットの「サービング」ログのみを無効にします。Rails actionpackリクエストログは無効になりません。 Railsメンテナーはこれをここで明確に説明しています: https://github.com/Rails/rails/issues/4569#issuecomment-35945
リンクから例を挙げると、次のようなログは無効になっています。
配信済みアセット/jquery.isotope.js-304変更なし(0ms)
しかし、このようなログはそうではありません
2012-01-20 23:16:46 -0500で127.0.0.1のGET "/assets/jquery.isotope.js?body=1"を開始しました
私はそれがい一時的な解決策であることを知っていますが、私はこれを使用します:
tail -f log/development.log | grep -vE 'アセット'
config.assets.quiet = true
これが最新の方法です。
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が追加したのと同じコードです。私も窓の下で動作するように含めました。
config/environmentsのdevelopment.rbには、config.assets.debug = true
という行があります。それをfalse
に切り替えると、アセットのロード出力のほとんどが失われます。私のシステムでは、application.cssと.jsの2つのリクエストのみが残ります。
Config/environments/development.rbに以下を追加してください:
config.assets.debug = false
config.assets.logger = false
これは問題の解決に役立ちます。
Lograge win-の場合、Railsの迷惑なロガーのデフォルトを強制終了します(アセットのロギング、部分的なレンダリングのロギングなど) 、特定のアイテムを追加/削除する場合はカスタマイズ可能です。
下記のリンクソリューションが役立ちます。
https://github.com/evrone/quiet_assets
また、以下のようにそれは私のためにうまく機能しています
3.1(のみ)(3.2 before before_dipatch)
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