Ruby on Rails 3.1'de varlık boru hattı (zincir dişlileri) iletilerinin günlüğe kaydedilmesini nasıl devre dışı bırakabilirim?


378

Dişliler, Ruby on Rails 3.1 (RC1) altında varsayılan olarak (dev) günlüğünde oldukça ayrıntılı olma eğilimindedir:

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)
...

Ayrıntı düzeyini azaltmak veya tamamen devre dışı bırakmak istiyorum.

Orada devre dışı temiz bir yoldur ya da aşağıdaki bir yapılandırma satırı ekleyerek günlük ayrıntı seviyesini azaltmak assuming environment.rbveya development.rbbenzer config.active_record.logger = nilhangi sessizlikler ActiveRecord SQL ifadelerini.


Birisi bunun hakkında bir hata bildirdi: # 2639 . 9/2 itibariyle hala "açık".
istvanp

14
Bu soru için kabul edilen cevap değiştirilmeli veya güncellenmelidir. Rails 3.2'de sadece config.assets.debug = falsedevelopment.rb dosyasına koyabilirsiniz .
Stewart Johnson

7
@StewartJohnson - config.assets.debug = falsevarlıkları tek bir dosyada birleştirecek - çoğu insanın gelişimde istediği gibi değil
Yarin

Yanıtlar:


382

Aşağıdaki kodu 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

Güncellendi: Şimdi Ruby on Rails 3.2 için de çalışıyor (önceki deneme düzeltmeleri before_dispatchve şimdi callbunun yerine kök raf için gidiyoruz )

Güncelleme: alias_method_chain@macournoyer'den uygun bir Rack ara katman yazılımı çözümü (kırılgan değil ) https://github.com/rails/rails/issues/2639#issuecomment-6591735


3
Rails 3.2.1'den itibaren tek başına çeken zincir dişlisi kütüğünü susturmaz ve choonkeat'ın dosyası hala gereklidir.
IAmNaN

5
Aslında. Bu dosya gibi sesler her zaman gerekli olacaktır, çünkü config.assets.loggerfalse değerine ayarlamak sadece Sprockets'in çıkardığı sesi susturur. Bu, Eylem Paketi isteklerini / yanıtlarını susturur; bu, Rails geliştiricisinin özel durumlar için susturmak istemediklerini söylediği bir şeydir .
Ben Kreeger

32
uhm. sadece raylar çekirdeği içine almak gerekir. config.assets
jsharpe'de

2
Pencerelerde '/dev/null'' NUL'
Matt

4
Rails 4.2.0 benim için çalışıyor
seri motor

189

Https://github.com/evrone/quiet_assets adresine bir göz atın ve sadece Gem dosyanıza ekleyin.

Tembel için: gem 'quiet_assets', group: :development


6
Büyük iş, ama bunun için ayrı bir mücevher gerekli çok üzücü.
Adam Spires

1
Jose Valim'in burada doğru karar verdiğini düşünüyorum github.com/rails/rails/issues/2639 raylar gelen tüm istekleri günlüğe kaydetmelidir ve bunu kabul ediyorum, dişliler kaynak haritasını github.com
rota

5
tembel için: gem 'quiet_assets'(lütfen
yazıyı

52

Ruby on Rails 3.2 config.assets.logger = falseiçin, genellikle adresinde bulunan geliştirme ortamı yapılandırma dosyanıza ekleyin config/environments/development.rb. Bkz. # 4512 .


Beklendiği gibi Raise 4'te çalışır. Bunu yapmak için sunucuyu yeniden başlatmak gerekiyordu.
Langusten Gustel

2
Raylar 4.0.2 config.assets.logger = nilbenim için çalışıyor
byterussian

4
Raylar 4.0.4 config.assets.logger = nilbenim için çalışmıyor
hendrikbeck

28

İki şey yeter:

  1. config.assets.debug = false içinde config/enviroments/development.rb
  2. rake assets:precompile. Aşağıdaki @oma yorumuna bakın; buna gerek yok

Bu kadar!


19
1. doğrudur. Teşekkürler! Lütfen No 2'yi kaldırın rake assets:precompile. Geliştirmede yapmak istediğimiz bir şey değil
oma

Bu muhtemelen orijinal sorunun gönderildiği sırada işe yaramasa da şimdi (ve @Race'nin belirttiği gibi, zaten 3.2.3 witl) çalışıyor ve şimdi kabul edilen cevap olmalı.
radiospiel

2
İstvanp'ın aşağıda belirttiği gibi, bu düşündüğünü yapmaz. Yalnızca tüm JS ve CSS varlıklarını tek bir büyük dosyada derler - varlıkların günlüğe kaydedilmesini kapatmaz.
davidgoli

2
Bu, 4.2.2 raylarında ihtiyaç duyulan her şeydir
thisfeller

@Davidgoli'nin söylediklerine ek olarak: config.assets.debug varlık birleştirmesini denetler. Bunu kapatmak, tarayıcıyı kullanarak JS ve CSS gibi hata ayıklama işlemlerinin daha fazla işe yarayacağı anlamına gelir. Quiet_assets gibi bir şey, varlıkların hatalarını ayıklamanıza neden olmadan günlük kaydını susturur.
johncip

27

Sonunda, olacak config.assets.logger = nil, ama bu bölüm şu anda master üzerinde saklanıyor (henüz yapılmadı).


5
Rails 3.1.3'te benim için çalışmıyor. @nessur: sizin için uygun olduğundan emin misiniz? Tim'in dediği gibi # 2639 hala açık ve bu konuda herhangi bir düzeltme görmüyorum (her iki referans isteği de reddedildi).
Adam Spires

Bu, bu aşama olarak uygulanmayacaktır. github.com/rails/rails/issues/4569
23inhouse

@AdamSpiers bağlantıya göre: github.com/rails/rails/pull/3795#issuecomment-3549669 "Raylar, kaydedicilerin veya kaydedici ile ilgili orta yolların herhangi birinin belirli rotaları
kaydetmemesi

3
Aylak. Rails 4 hala varlık günlüğünü kolayca devre dışı bırakamıyor.
Tom Rossi

1
Rails 4.2 kullanıyorum development.rb, bunu benim koymak ve varlıkların günlüğü devre dışı bıraktı .
Jack

12

Çirkin ve geçici bir çözüm olduğunu biliyorum, ama bunu kullanıyorum:

kuyruk -f log / development.log | grep -vE 'varlık'


9
İşte boş satırları da kaldıran gelişmiş bir satır:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

Birçok insanın kullanımı konusunda kafası karışık config.assets.logger = false. İşte yaptığı ve yapmadığı şey.

Kaynak belgelere göre :

config.assets.loggerFalse değerine ayarlamak , sunulan varlıkların günlüğe kaydedilmesini kapatır.

Ancak bu muhtemelen düşündüğünüz gibi değil. Ruby on Rails eylem paketi istek günlüklerini değil, yalnızca dişli 'sunum' günlüklerini devre dışı bırakır . Ruby on Rails bakıcısı bunu burada açıkça açıklıyor: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Bağlantıdan örnek alındığında, bunun gibi günlükler devre dışı bırakılır:

Sunulan varlık /jquery.isotope.js - 304 Değiştirilmedi (0ms)

Ama böyle günlükler değil

2012-01-20 23:16:46 -0500'de 127.0.0.1 için "/assets/jquery.isotope.js?body=1" ALIN


10
config.assets.quiet = true

Bu en son yol.


Rails 5'de mükemmel çalışıyor. Sadece bunu development.rb
dökün

Hata ayıklama ile birleştiğinde, Rails 5'teki tüm ihtiyaçlarımı
çözmez

7

kullanın:

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 ile aynı kod eklendi . Sadece Windows altında da çalışmaya dahil ettim.


7

Dosya olarak development.rb içinde yapılandırma / ortamlarında çizgiyi bulacaksınız config.assets.debug = true.

Bunu olarak değiştirin false, varlık yükü çıktısının çoğu gider. Sistemimde, application.css ve .js için yalnızca iki istek kalır.


3
Bu ayar, daha kolay hata ayıklama için true olarak ayarlandığında stil sayfalarını ve javascript'i ayrı dosyalara bölmenize izin verir. False (varsayılan) olarak ayarlandığında, hepsini tek bir büyük dosyada toplar. Bu yüzden gerçekten hata ayıklama çıktısını azaltır, ancak örneğin resimleriniz varsa, bunlar hiç etkilenmez. Resmi rehber bilgileri burada .
istvanp

1
Anlıyorum. Temizlediğin için teşekkürler. Ama bu değişkenin ayarını değiştirmedim, bu yüzden varsayılanım buydu true.
TKAB

5

Config / environment / development.rb dosyasına lütfen ekleyin:

config.assets.debug = false

config.assets.logger = false

2

Kazanmak için logarge - Ruby on Rails'in can sıkıcı günlükçüsü varsayılan olarak kutudan çıkarılır (örneğin, varlıkları günlüğe kaydetme, kısmi oluşturma günlüğü kaydetme) ve belirli öğeleri eklemek / kaldırmak istiyorsanız özelleştirilebilir.


0

Önceden bahsedilen bağlantılı çözüm yardımcı olur:

https://github.com/evrone/quiet_assets

Ayrıca aşağıdaki gibi, benim için iyi çalışıyor:

3,1 (yalnızca) (dağıtımdan önce 3,2 mola)

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

-1

Yapılandırma / ortamlarda config.log_level = :errordeğiştirmek istediğiniz .rb dosyalarına ekleyin . Bu, günlük ayarlarını yalnızca hata olarak değiştirir.


Ne yazık ki hayır çünkü çoğunlukla hata ayıklama düzeyindeki istek ve SQL verileri bakmak için günlük kullanın. Varlık mesajları bilgi düzeyindedir (hata ayıklama düzeyinden daha düşüktür), bu ayarla istediğim şeyi almanın bir yararı yoktur.
istvanp

2
Bu iyi bir fikir değil. Hala günlüğe kaydetmek isteyebileceğiniz diğer bilgi düzeyi iletilerini gizler.
ifightcrime
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.