web-dev-qa-db-ja.com

Rails 3.1のアセットパイプライン(スプロケット)メッセージのロギングを無効にする方法

スプロケットは、デフォルトで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行を追加することにより、ロギングの冗長性を無効化または削減するクリーンな方法があると仮定しています。

377
istvanp

次のコードを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

381
choonkeat

https://github.com/evrone/quiet_assets を見て、それをGemfileに含めるだけです

遅延の場合:gem 'quiet_assets', group: :development

188
route

Rails 3.2の場合、通常config.assets.logger = falseにある開発環境構成ファイルにconfig/environments/development.rbを追加します。 #4512 を参照してください

53
ouranos

次の2つで十分です。
1。 config.assets.debug = falseconfig/enviroments/development.rb
2。 rake assets:precompile以下の@omaのコメントをご覧ください。これは不要です

それで全部です!

28
Lisovsky Vlad

最終的にはconfig.assets.logger = nilになりますが、その部分は現在マスター上でスタブ化されています(まだ完了していません)

27
colinross

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"を開始しました

12
lulalala

私はそれがい一時的な解決策であることを知っていますが、私はこれを使用します:

tail -f log/development.log | grep -vE 'アセット'

12
Sucrenoir
config.assets.quiet = true

これが最新の方法です。

9
Adam Waite
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が追加したのと同じコードです。私も窓の下で動作するように含めました。

7
Celso Dantas

config/environmentsのdevelopment.rbには、config.assets.debug = trueという行があります。それをfalseに切り替えると、アセットのロード出力のほとんどが失われます。私のシステムでは、application.cssと.jsの2つのリクエストのみが残ります。

7
TKAB

Config/environments/development.rbに以下を追加してください:

config.assets.debug = false

config.assets.logger = false

これは問題の解決に役立ちます。

5
Najam Tariq

Lograge win-の場合、Railsの迷惑なロガーのデフォルトを強制終了します(アセットのロギング、部分的なレンダリングのロギングなど) 、特定のアイテムを追加/削除する場合はカスタマイズ可能です。

2
Yarin

下記のリンクソリューションが役立ちます。

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 
0
Sumit Munot