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


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


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


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 .


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!


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


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'


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


10
config.assets.quiet = true

Este es el último camino a seguir.


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.


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.


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

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.


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

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.