Jak mogę wyłączyć rejestrowanie komunikatów potoku zasobów (zębatek) w Ruby on Rails 3.1?

378

Koła zębate są zazwyczaj dość szczegółowe w dzienniku (dev) w Ruby on Rails 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)
...

Chciałbym albo zmniejszyć poziom gadatliwości, albo całkowicie go wyłączyć.

Zakładam, że istnieje czysty sposób na wyłączenie lub zmniejszenie szczegółowości rejestrowania przez dodanie wiersza konfiguracji w którymkolwiek environment.rblub development.rbpodobnym, do config.active_record.logger = nilktórego wyciszają instrukcje SQL ActiveRecord.

istvanp
źródło
Ktoś zgłosił błąd na ten temat: # 2639 . Nadal „otwarty” od 9.02.
istvanp,
14
Akceptowana odpowiedź na to pytanie powinna zostać zmieniona lub zaktualizowana. W Railsach 3.2 możesz po prostu umieścić config.assets.debug = falseswój plik development.rb.
Stewart Johnson
7
@StewartJohnson - config.assets.debug = falsepołączy zasoby w jeden plik - nie to, czego większość ludzi chce w rozwoju
Yarin

Odpowiedzi:

382

Umieść następujący kod w 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

Zaktualizowano: Teraz działa również dla Ruby on Rails 3.2 (poprawki poprzedniej próby before_dispatch, a teraz callzamiast tego wybieramy stojak root )

Aktualizacja: Właściwe rozwiązanie oprogramowania pośredniego Rack (zamiast niestabilnego alias_method_chain) od @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735

choonkeat
źródło
3
Począwszy od wersji Railsowej 3.2.1, te same ściągnięcia nie blokują rejestrowania zębatki, a plik choonkeat jest nadal potrzebny.
IAmNaN
5
W rzeczy samej. Wygląda na to, że ten plik będzie zawsze potrzebny, ponieważ ustawienie wartości config.assets.loggerfalse spowoduje wyciszenie tylko tego, co wyświetla Sprockets. To ucisza żądania / odpowiedzi Action Pack, co twórcy Railsów powiedzieli, że nie zamierzają wyciszać w szczególnych przypadkach .
Ben Kreeger,
32
uhm. powinieneś po prostu wprowadzić to do rdzenia. zrób z niego opcję w config.assets
jsharpe
2
W systemie Windows zamień na '/dev/null'NUL
Matt
4
Działa dla mnie na Railsach 4.2.0
silnik seryjny
189

Spójrz na https://github.com/evrone/quiet_assets i po prostu umieść go w swoim pliku Gem.

Dla leniwych: gem 'quiet_assets', group: :development

trasa
źródło
6
Świetna robota, ale bardzo smutne, że do tego potrzebny jest osobny klejnot.
Adam Spiers,
1
Myślę, że Jose Valim podjął właściwą decyzję tutaj github.com/rails/rails/issues/2639 szyny muszą rejestrować wszystkie przychodzące żądania i zgadzam się z tym, myślę, że możemy pozbyć się tego narzutu, gdy zębatki będą obsługiwały mapę źródłową github.com / sstephenson / sprockets / Issues / 310
route
5
dla leniwych: gem 'quiet_assets'(dodaj to do posta :))
reto
52

W przypadku Ruby on Rails 3.2 dodaj config.assets.logger = falsedo pliku konfiguracyjnego środowiska programistycznego, zwykle znajdujący się pod adresem config/environments/development.rb. Zobacz # 4512 .

ouranos
źródło
Działa w Raise 4 zgodnie z oczekiwaniami. Konieczne było zrestartowanie serwera, aby to działało.
Langusten Gustel
2
Rails 4.0.2 config.assets.logger = nildziała dla mnie
Byterussian
4
Railsy 4.0.4 config.assets.logger = nilNIE działają dla mnie
hendrikbeck
28

Wystarczy dwie rzeczy:

  1. config.assets.debug = false w config/enviroments/development.rb
  2. rake assets:precompile. Zobacz komentarz @oma poniżej; to nie jest potrzebne

To wszystko!

Lisovsky Vlad
źródło
19
1. jest poprawny. Dzięki! Usuń nr 2. rake assets:precompilenie jest czymś, co chcemy robić w fazie rozwoju
oma
Chociaż prawdopodobnie nie działało to w chwili opublikowania pierwotnego pytania, teraz działa (i, jak stwierdził @Race, już w wersji 3.2.3) i powinna być teraz akceptowana odpowiedź.
radiospiel
2
Jak wskazuje istvanp poniżej, nie robi to, co myślisz. Kompiluje tylko wszystkie zasoby JS i CSS w jeden duży plik - nie wyłącza rejestrowania zasobów.
davidgoli
2
To wszystko, co jest potrzebne w szynach 4.2.2
lot
Dodając do tego, co powiedział @davidgoli: config.assets.debug kontroluje konkatenację zasobów. Wyłączenie tego oznacza, że ​​debugowanie np. JS i CSS za pomocą przeglądarki stanie się bardziej skuteczne. Coś takiego jak quiet_assets zniweczy rejestrowanie bez powodowania konieczności przełączania zasobów.debug do, cóż, debugowania.
johncip
27

W końcu tak będzie config.assets.logger = nil, ale ta część jest obecnie stubowana na master (jeszcze nie zrobiona).

colinross
źródło
5
Nie działa dla mnie również w Rails 3.1.3. @nessur: czy na pewno to działa dla Ciebie? Jak mówi Tim, nr 2639 jest nadal otwarty i nie widzę żadnych oznak w tej kwestii jakiejkolwiek poprawki (oba przywołane żądania ściągnięcia zostały odrzucone).
Adam Spiers,
Nie będzie to realizowane jako ten etap. github.com/rails/rails/issues/4569
23inhouse
@AdamSpiers zgodnie z linkiem: github.com/rails/rails/pull/3795#issuecomment-3549669 „Szyny nie będą specjalnym przypadkiem żadnego z programów rejestrujących lub powiązanych z nimi programów pośrednich, aby nie rejestrowały określonych tras”
23inhouse
3
Porażka. Rails 4 nadal nie może łatwo wyłączyć rejestrowania zasobów.
Tom Rossi
1
Używam Rails 4.2, włóż to do mojego development.rbi to uniemożliwiło rejestrowanie zasobów.
Jack
12

Wiem, że to brzydkie i tymczasowe rozwiązanie, ale używam tego:

tail -f log / development.log | grep -vE „zasób”

Sucrenoir
źródło
9
Oto ulepszony, który usuwa również puste linie:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp
12

Wiele osób ma wątpliwości co do używania config.assets.logger = false. Oto, co robi, a czego nie.

Według dokumentacji źródłowej :

Ustawienie wartości config.assets.loggerfalse spowoduje wyłączenie rejestrowania obsługiwanych zasobów.

Jednak prawdopodobnie nie jest tak, jak myślisz. Wyłącza tylko dzienniki „serwujące” , a nie dzienniki żądań pakietu Ruby on Rails. Opiekun Ruby on Rails wyjaśnia to tutaj: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Biorąc przykład z linku, dzienniki takie jak to są wyłączone:

Obsługiwany zasób /jquery.isotope.js - 304 niezmodyfikowany (0ms)

Ale takie dzienniki nie są

Rozpoczęto GET „/assets/jquery.isotope.js?body=1” dla 127.0.0.1 o 01.01.2012 23:16:46 -0500

lulalala
źródło
10
config.assets.quiet = true

To najnowsza droga.

Adam Waite
źródło
Działa idealnie w Rails 5. Po prostu wrzuć to dodevelopment.rb
Andreykul
W połączeniu z debugowaniem nie rozwiązuje wszystkich moich potrzeb w Rails 5.
Pysis
7

Posługiwać się:

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

To ten sam kod Choonkeat, który został dodany . Właśnie załączyłem go do pracy pod Windows.

Celso Dantas
źródło
7

W pliku development.rb w config / environment znajdziesz linię config.assets.debug = true.

Przełącz to na, falsea większość danych wyjściowych obciążenia zasobu zniknie. W moim systemie pozostały tylko dwa żądania: application.css i .js.

TKAB
źródło
3
To ustawienie pozwala tylko na dzielenie arkuszy stylów i javascript na osobne pliki, gdy jest ustawiony na true dla łatwiejszego debugowania. Po ustawieniu na false (domyślnie), łączy je wszystkie w jeden duży plik. Tak więc to rzeczywiście zmniejsza wydajność debugowania, ale jeśli masz na przykład obrazy, nie ma to żadnego wpływu. Oficjalne informacje przewodnika tutaj .
istvanp
1
Widzę. Dzięki za wyjaśnienie. Ale nie zmieniłem ustawienia tej zmiennej, więc moja domyślna to true.
TKAB,
5

W pliku config / environment / development.rb dodaj:

config.assets.debug = false

config.assets.logger = false
Najam Tariq
źródło
2

Lograge dla wygranej - zabija irytujące domyślne ustawienia rejestratora Ruby on Rails po wyjęciu z pudełka (np. Rejestrowanie zasobów, rejestrowanie częściowego renderowania) i można go dostosować, jeśli chcesz dodać / usunąć określone elementy.

Yarin
źródło
0

Wspomniane wcześniej połączone rozwiązanie pomaga:

https://github.com/evrone/quiet_assets

Również jak poniżej działa dla mnie dobrze:

3.1 (tylko) (3.2 przerwy przed wpisem)

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
Sumit Munot
źródło
-1

W config / environment dodaj config.log_level = :errordo plików .rb, które chcesz zmienić. Spowoduje to zmianę ustawień dziennika tylko na błąd.

Chris O
źródło
Niestety nie, ponieważ najczęściej używam dziennika do przeglądania żądania i danych SQL znajdujących się na poziomie debugowania. Wiadomości o zasobach mają poziom informacyjny (który jest niższy niż poziom debugowania), więc nie ma sensu dostawać tego, co chcę z tym ustawieniem.
istvanp,
2
To nie jest dobry pomysł. Ukryje inne wiadomości na poziomie informacji, które możesz chcieć nadal rejestrować.
ifightcrime