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.


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


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


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 .


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!


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


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”


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


10
config.assets.quiet = true

To najnowsza droga.


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.


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.


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

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.


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.