¿Cómo puedo deshabilitar el registro de mensajes de canalización de activos (piñones) en Ruby on Rails 3.1?

378

Las ruedas dentadas tienden a ser bastante detalladas en el registro (dev) de forma predeterminada en 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)
...

Me gustaría reducir el nivel de verbosidad o deshabilitarlo por completo.

Supongo que hay una forma limpia de deshabilitar o reducir la verbosidad del registro agregando una línea de configuración en cualquiera environment.rbo development.rbsimilar a la config.active_record.logger = nilque silencia las declaraciones SQL de ActiveRecord.

istvanp
fuente
Alguien reportó un error sobre esto: # 2639 . Todavía "abierto" a partir del 9/2.
istvanp
14
La respuesta aceptada para esta pregunta debe cambiarse o actualizarse. En Rails 3.2 puedes poner config.assets.debug = falsetu desarrollo.rb.
Stewart Johnson el
77
@StewartJohnson - config.assets.debug = falseconcatenará los activos en un solo archivo, no es lo que la mayoría de la gente quiere en el desarrollo
Yarin

Respuestas:

382

Coloque el siguiente código en 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

Actualizado: ahora también funciona para Ruby on Rails 3.2 (arreglos de intentos anteriores before_dispatch, y ahora vamos por el rack raíz call)

Actualización: una solución de middleware Rack adecuada (en lugar de frágil alias_method_chain) de @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735

choonkeat
fuente
3
A partir de Rails 3.2.1, esos tirones por sí solos no silencian el registro de la rueda dentada y todavía se necesita el archivo de choonkeat.
IAmNaN
55
En efecto. Parece que este archivo siempre será necesario, ya que establecerlo config.assets.loggeren falso solo silenciará las salidas de Sprockets. Esto silencia las solicitudes / respuestas de Action Pack, que es algo que los desarrolladores de Rails han dicho que no tienen la intención de silenciar para casos especiales .
Ben Kreeger
32
uhm deberías llevar esto al núcleo de rieles. convertirlo en una opción en config.assets
jsharpe
2
En Windows, reemplace '/dev/null'con ' NUL'
Matt
44
Funciona para mí en Rails 4.2.0
motor serial
189

Eche un vistazo a https://github.com/evrone/quiet_assets e inclúyalo en su archivo Gem.

Para los perezosos: gem 'quiet_assets', group: :development

ruta
fuente
66
Gran trabajo, pero muy triste porque se requiere una gema separada para esto.
Adam Spires
1
Creo que Jose Valim tomó la decisión correcta aquí github.com/rails/rails/issues/2639 rails tiene que registrar todas las solicitudes entrantes y estoy de acuerdo con eso, creo que podemos deshacernos de esta sobrecarga cuando las ruedas dentadas admitirán el mapa fuente github.com / sstephenson / sprockets / issues / 310
ruta del
55
para los perezosos: gem 'quiet_assets'(agreguen esto a la publicación :))
reto el
52

Para Ruby on Rails 3.2, agregue config.assets.logger = falseal archivo de configuración del entorno de desarrollo, que normalmente se encuentra en config/environments/development.rb. Ver # 4512 .

ouranos
fuente
Funciona en Raise 4 como se esperaba. Necesario para reiniciar el servidor para que esto funcione.
Langusten Gustel
2
Rails config.assets.logger = nil
4.0.2
44
Rails 4.0.4 config.assets.logger = nilNO me funciona
hendrikbeck
28

Dos cosas son suficientes:

  1. config.assets.debug = false en config/enviroments/development.rb
  2. rake assets:precompile. Ver comentario de @oma a continuación; esto no es necesario

¡Eso es todo!

Lisovsky Vlad
fuente
19
1. es correcto ¡Gracias! Por favor, elimine el No 2. rake assets:precompileno es algo que queremos hacer en desarrollo
oma
Si bien esto probablemente no funcionó en el momento en que se publicó la pregunta original, funciona ahora (y, como dijo @Race, ya con 3.2.3) y debería haber una respuesta aceptada ahora.
radiospiel
2
Como istvanp señala a continuación, eso no hace lo que crees que hace. Solo compila todos los activos JS y CSS en un solo archivo grande; no desactiva el registro de activos.
davidgoli
2
Esto es todo lo que se necesita en los rieles 4.2.2
thisfeller
Además de lo que dijo @davidgoli: config.assets.debug controla la concatenación de activos. Desactivar eso significa que la depuración, por ejemplo, JS y CSS utilizando el navegador, será más difícil. Algo así como quiet_assets silenciará el registro sin causar que deba alternar assets.debug para, bueno, depurar.
johncip 01 de
27

Eventualmente, lo será config.assets.logger = nil, pero esa parte se encuentra actualmente aprisionada en el maestro (aún no se ha hecho).

colinross
fuente
55
Tampoco funciona para mí en Rails 3.1.3. @nessur: ¿estás seguro de que funciona para ti? Como dice Tim, el # 2639 todavía está abierto, y no veo ninguna indicación en ese tema de ninguna solución (ambas solicitudes de extracción referenciadas fueron rechazadas).
Adam Spires
Esto no se implementará en esta etapa. github.com/rails/rails/issues/4569
23inhouse
@AdamSpiers según el enlace: github.com/rails/rails/pull/3795#issuecomment-3549669 "Rails no será el caso especial de ninguno de los registradores o intermediarios relacionados con el registrador para no registrar rutas específicas"
23inhouse
3
Gorrón. Rails 4 todavía no puede deshabilitar fácilmente el registro de activos.
Tom Rossi
1
Estoy usando Rails 4.2, puse esto en mi development.rby deshabilitó el registro de activos.
Jack
12

Sé que es una solución fea y temporal, pero uso esto:

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

Sucrenoir
fuente
99
Aquí hay una mejorada que también elimina las líneas en blanco:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp
12

Muchas personas están confundidas sobre el uso de config.assets.logger = false . Esto es lo que hace y lo que no hace.

Según la documentación fuente :

Establecer config.assets.loggeren falso desactivará el registro de activos servidos.

Sin embargo, esto probablemente no es lo que crees que es. Solo deshabilita los registros de 'servicio' de la rueda dentada , no los registros de solicitud de paquete de acción de Ruby on Rails. El mantenedor de Ruby on Rails explica esto claramente aquí: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Tomando ejemplo del enlace, los registros como este están deshabilitados:

Activo servido /jquery.isotope.js - 304 No modificado (0 ms)

Pero los registros como este no son

Comenzó GET "/assets/jquery.isotope.js?body=1" para 127.0.0.1 en 2012-01-20 23:16:46 -0500

lulalala
fuente
10
config.assets.quiet = true

Este es el último camino a seguir.

Adam Waite
fuente
Funciona perfectamente en Rails 5. Simplemente volcar esto endevelopment.rb
Andreykul
Junto con la depuración, no resuelve todas mis necesidades en Rails 5.
Pysis
7

Utilizar:

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

Es el mismo código choonkeat agregado . También lo incluí para trabajar en Windows también.

Celso Dantas
fuente
7

En el archivo development.rb en config / entornos encontrará la línea config.assets.debug = true.

Cambie eso falsey la mayor parte de la salida de carga de activos desaparecerá. En mi sistema solo quedan las dos solicitudes, para application.css y .js.

TKAB
fuente
3
Esa configuración solo le permite dividir las hojas de estilo y javascript en archivos separados cuando se establece en verdadero para una depuración más fácil. Cuando se establece en falso (el valor predeterminado), los agrupa a todos en un archivo grande. Por lo tanto, sí reduce la salida de depuración, pero si tiene imágenes, por ejemplo, no se ven afectadas en absoluto. Información oficial de la guía aquí .
istvanp
1
Veo. Gracias por aclarar eso. Pero no cambié la configuración de esta variable, por lo que mi valor predeterminado fue true.
TKAB
5

En el archivo config / assets / development.rb , agregue:

config.assets.debug = false

config.assets.logger = false
Najam Tariq
fuente
2

Lograge for the win: elimina los molestos valores predeterminados del registrador de Ruby on Rails (por ejemplo, registrar activos, registrar renderizado parcial) y es personalizable si desea agregar / eliminar elementos específicos.

Yarin
fuente
0

La solución vinculada mencionada anteriormente ayuda a:

https://github.com/evrone/quiet_assets

También como a continuación, está funcionando bien para mí:

3.1 (solo) (3.2 saltos antes de 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
Sumit Munot
fuente
-1

En configuración / entornos agregue config.log_level = :errora los archivos .rb que desea cambiar. Esto cambiará la configuración del registro a solo error.

Chris O
fuente
Desafortunadamente no, porque uso principalmente el registro para mirar la solicitud y los datos SQL que están en el nivel de depuración. Los mensajes de activos son de nivel de información (que es inferior al nivel de depuración), por lo que no sirve de nada obtener lo que quiero con esa configuración.
istvanp
2
Esta no es una buena idea. Ocultará otros mensajes de nivel de información que tal vez desee seguir registrando.
ifightcrime