Come posso disabilitare la registrazione dei messaggi della pipeline di risorse (ruote dentate) in Ruby on Rails 3.1?


378

I pignoni tendono ad essere abbastanza dettagliati nel registro (dev) per impostazione predefinita in 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)
...

Vorrei ridurre il livello di verbosità o disabilitarlo del tutto.

Suppongo che ci sia un modo chiaro per disabilitare o ridurre la verbosità della registrazione aggiungendo una riga di configurazione in una environment.rbo development.rbsimile a config.active_record.logger = nilcui silenzia le istruzioni SQL di ActiveRecord.


Qualcuno ha segnalato un bug al riguardo: # 2639 . Ancora "aperto" al 9/2.
Istanbul

14
La risposta accettata per questa domanda dovrebbe essere modificata o aggiornata. In Rails 3.2 puoi semplicemente inserire il config.assets.debug = falsetuo development.rb.
Stewart Johnson,

7
@StewartJohnson: config.assets.debug = falseconcatenerà le risorse in un unico file, non quello che la maggior parte delle persone vuole sviluppare
Yarin,

Risposte:


382

Inserisci il seguente codice in 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

Aggiornato: ora funziona anche per Ruby on Rails 3.2 (correzioni di tentativi precedenti before_dispatch, e ora andiamo callinvece al rack di root )

Aggiornamento: una soluzione middleware Rack appropriata (anziché fragile alias_method_chain) da @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735


3
A partire da Rails 3.2.1 quei pull da soli non schiacciano la registrazione dei pignoni e il file choonkeat è ancora necessario.
IAmNaN,

5
Infatti. Sembra che questo file sia sempre necessario, poiché l'impostazione config.assets.loggersu false silenzia solo ciò che produce Sprockets. Questo mette a tacere le richieste / risposte di Action Pack, cosa che gli sviluppatori di Rails hanno affermato di non voler mettere a tacere per casi speciali .
Ben Kreeger,

32
uhm. dovresti semplicemente ottenere questo nel core di rotaie. rendilo un'opzione in config.assets
jsharpe l'

2
Su windows sostituisci '/dev/null'con ' NUL'
Matt,

4
Funziona per me su Rails 4.2.0
motore seriale

189

Dai un'occhiata a https://github.com/evrone/quiet_assets e includilo nel tuo file Gem.

Per i pigri: gem 'quiet_assets', group: :development


6
Ottimo lavoro, ma molto triste che per questo è necessaria una gemma separata.
Adam Spires

1
Penso che Jose Valim abbia preso la decisione giusta qui github.com/rails/rails/issues/2639 rails deve registrare tutte le richieste in arrivo e sono d'accordo con questo, penso che potremo liberarci di questo sovraccarico quando i pignoni supporteranno la mappa delle fonti github.com / sstephenson / pignoni / numeri / 310
rotta

5
per i pigri: gem 'quiet_assets'(si prega di aggiungere questo al post :))
reto

52

Per Ruby on Rails 3.2, aggiungere config.assets.logger = falseal file di configurazione dell'ambiente di sviluppo, in genere disponibile all'indirizzo config/environments/development.rb. Vedi # 4512 .


Funziona con Raise 4 come previsto. Necessario riavviare il server per farlo funzionare.
Langusten Gustel,

2
Rails 4.0.2 config.assets.logger = nilfunziona per me
byterussian

4
Rails 4.0.4 config.assets.logger = nilNON funziona per me
hendrikbeck,

28

Sono sufficienti due cose:

  1. config.assets.debug = false in config/enviroments/development.rb
  2. rake assets:precompile. Vedi il commento di @oma in basso; questo non è necessario

È tutto!


19
1. è corretto. Grazie! Si prega di rimuovere No 2. rake assets:precompilenon è qualcosa che vogliamo fare in sviluppo
oma

Anche se questo probabilmente non ha funzionato al momento della pubblicazione della domanda originale, ora funziona (e, come affermato da @Race, già con 3.2.3) e dovrebbe esserci la risposta accettata ora.
radiospiel,

2
Come sottolinea istvanp di seguito, ciò non fa ciò che pensi che faccia. Compila solo tutti gli asset JS e CSS in un unico file di grandi dimensioni, non disattiva la registrazione degli asset.
davidgoli,

2
Questo è tutto ciò che serve nelle rotaie 4.2.2
venditore

In aggiunta a ciò che ha detto @davidgoli: config.assets.debug controlla la concatenazione degli asset. Disattivarlo significa che il debug, ad es. JS e CSS utilizzando il browser, diventerà più lavoro. Qualcosa come quiet_assets eliminerà la registrazione senza indurre l'utente a dover attivare e disattivare il debug di assets.debug.
johncip,

27

Alla fine lo sarà config.assets.logger = nil, ma quella parte è attualmente testata sul master (non ancora eseguita).


5
Non funziona neanche per me su Rails 3.1.3. @nessur: sei sicuro che funzioni per te? Come dice Tim, # 2639 è ancora aperto e non vedo alcuna indicazione in quel numero di alcuna correzione (entrambe le richieste pull referenziate sono state respinte).
Adam Spires,

Questo non sarà implementato in questa fase. github.com/rails/rails/issues/4569
23 inhouse

@AdamSpiers come da link: github.com/rails/rails/pull/3795#issuecomment-3549669 "Le rotaie non faranno caso speciale a nessuno dei logger o dei relativi programmi logger per non registrare percorsi specifici"
23

3
Bummer. Rails 4 non riesce ancora a disabilitare facilmente la registrazione delle risorse.
Tom Rossi,

1
Sto usando Rails 4.2, lo inserisco in my development.rbe disabilita la registrazione delle risorse.
Jack,

12

So che è una soluzione brutta e temporanea, ma io uso questo:

tail -f log / development.log | grep -vE 'asset'


9
Eccone uno migliorato che rimuove anche le righe vuote:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

Molte persone sono confuse sull'uso di config.assets.logger = false. Ecco cosa fa e cosa non fa.

Secondo la documentazione di origine :

L'impostazione config.assets.loggersu false disattiverà la registrazione delle risorse servite.

Tuttavia, questo probabilmente non è quello che pensi che sia. Disabilita solo i registri di "pubblicazione" dei pignoni , non i registri di richieste del pacchetto azioni di Ruby on Rails. Il manutentore di Ruby on Rails lo spiega chiaramente qui: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Prendendo esempio dal link, i log come questo sono disabilitati:

Asset servito /jquery.isotope.js - 304 non modificato (0ms)

Ma i registri come questo non lo sono

Iniziato GET "/assets/jquery.isotope.js?body=1" per 127.0.0.1 al 20/01/2012 alle 23:16:46 -0500


10
config.assets.quiet = true

Questo è l'ultimo modo di procedere.


Funziona perfettamente in Rails 5. Basta scaricare questo indevelopment.rb
Andreykul,

Insieme al debug, non risolve tutti i miei bisogni in Rails 5.
Pysis

7

Uso:

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

È lo stesso codice aggiunto a choonkeat . L'ho appena incluso per funzionare anche con Windows.


7

In file development.rb in config / ambienti troverai la linea config.assets.debug = true.

Passa a falsee la maggior parte dell'output del carico di asset scomparirà. Sul mio sistema rimangono solo le due richieste, per application.css e .js.


3
Questa impostazione consente solo di suddividere i fogli di stile e javascript in file separati quando impostato su true per un debug più semplice. Se impostato su false (impostazione predefinita), li raggruppa in un unico file di grandi dimensioni. Quindi riduce effettivamente l'output di debug, ma se si dispone di immagini, ad esempio, quelle non sono affatto interessate. Informazioni sulla guida ufficiale qui .
istvanp,

1
Vedo. Grazie per averlo chiarito. Ma non ho modificato l'impostazione di questa variabile, quindi il mio valore predefinito era true.
TKAB,

5

In file config / environment / development.rb si prega di aggiungere:

config.assets.debug = false

config.assets.logger = false

2

Lograge per la vittoria: uccide le fastidiose impostazioni predefinite di Ruby on Rails (ad es. Registrazione delle risorse, registrazione del rendering parziale) ed è personalizzabile se si desidera aggiungere / rimuovere elementi specifici.


0

La soluzione collegata precedentemente menzionata aiuta a:

https://github.com/evrone/quiet_assets

Inoltre, come sotto, funziona bene per me:

3.1 (solo) (3.2 break 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

-1

In config / ambienti aggiungi config.log_level = :errorai file .rb che vuoi cambiare. Ciò modificherà le impostazioni del registro solo in caso di errore.


Purtroppo no perché uso principalmente il registro per esaminare la richiesta e i dati SQL che sono a livello di debug. I messaggi di risorse hanno un livello di informazioni (che è inferiore al livello di debug), quindi è inutile ottenere ciò che voglio con quell'impostazione.
Istanbul

2
Questa non è una buona idea. Nasconderà altri messaggi a livello di informazioni che potresti voler registrare.
ifightcrime
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.