Incluso la mayoría de los desarrolladores experimentados de Ruby on Rails a veces se olvidaron de los molestos errores que producen en los largos procesos de desarrollo, como las consultas
n + 1 o pierden mucho tiempo con algunas consultas inesperadas de la nada.
No todos estos errores se pueden evitar antes de la producción, pero al menos puedes probar :)
Sí, esa es otra lista de gemas olvidadas o no tan populares para los mejores procesos de desarrollo.
Comencemos
1. Bullet
Bullet : una de las soluciones más populares y fáciles para luchar con
n + 1 consultas.
Esta gema proporciona diferentes formas de mostrarle que algunas consultas no son eficientes. Navegador (registro de consola), registro de desarrollo, archivo de salida. Mi elección es simplemente usar un
registro de desarrollo porque no es tan molesto (algunos problemas se muestran simplemente a tiempo o no se pueden resolver fácilmente con la arquitectura actual).
Cómo funciona : tiene, por ejemplo, una solicitud de
índice para algunos modelos (
servicios ). Y este modelo tiene muchas relaciones diferentes (
servicios has_many grupos ), también tienen relaciones .. (
grupos has_many usuarios ,
usuarios has_many logos , etc.). Y puede causar una carga ineficiente repetida de datos (
n + 1 ). Desea mostrar logo_url y simplemente comienza a crear consultas innecesarias para cada usuario (a veces lo ve de inmediato, a veces no es tan claro). En la mayoría de los casos, la
bala arrojará las siguientes líneas en sus registros de desarrollo:
GET /api/services USE eager loading detected Service => [:groups] Add to your finder: :includes => [:groups] Call stack /home/projects/test_app_name/app/services/index.rb:18:in `perform' /home/projects/test_app_name/app/controllers/services_controller.rb:7:in `index'
Como puede ver, muestra la solicitud, lo que se encontró (carga ansiosa), el modelo y lo que se cargó exactamente varias veces. Y la pila de llamadas, por supuesto.
Buen comienzo!
Bullet puede encontrar cargamentos ansiosos no utilizados y cachés de mostrador. Y le permite desactivar cualquiera de sus detectores.
En mis proyectos, prefiero
deshabilitar las consultas de carga ansiosas no utilizadas porque es una situación común cuando un servicio de modelo de carga se usa en muchos lugares, y para diferentes lugares, no es necesario precargar algunas relaciones que claramente se necesitan en otros lugares. Y esta situación es muy molesta al final. Es mejor que precargues alguna información y luego olvides cargarla correctamente en algún lugar.
Mi configuración (en
development.rb ):
config.after_initialize do Bullet.enable = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end
Más información :
2. ActiveRecordQueryTrace (active_record_query_trace)
active_record_query_trace : una gema que registra / muestra una
traza inversa de todas las consultas SQL ejecutadas por Active Record
(Acabo de copiar la parte de la descripción de su página de Github porque tienen todo lo que necesitas saber)
Muestra una traza inversa para cada consulta en la consola de desarrollo y el registro de Rails. Le permite rastrear dónde se ejecutan las consultas en su aplicación. Útil para las optimizaciones de rendimiento y para encontrar dónde comenzar al realizar cambios en una aplicación grande.Cuando está habilitado, cada consulta se registrará como:
Started GET "/" for 172.19.0.1 at 2019-09-29 07:08:04 +0000 Processing by HomeController
Por mi parte, quiero decir que esta gema es muy útil cuando comienzas a trabajar en el proyecto, no desde el principio y no puedes saber cómo funciona todo (o solo con las funciones de colegas), y algunas llamadas de consulta no son fácilmente comprensibles. Podría ahorrar mucho tiempo, de verdad.
También una pequeña nota:
Por cada consulta de ActiveRecord habrá una traza adicional en el archivo de registro. Por defecto, es 5, que es lo suficientemente grande como para hacer que sus registros sean completamente ilegibles.
Pero se puede controlar:
ActiveRecordQueryTrace.lines = 1
Más información:3.rails_panel
RailsPanel es una
extensión de Chrome para el desarrollo de Rails que finalizará su
seguimiento de development.log . Tenga toda la información sobre las solicitudes de su aplicación Rails en el navegador, en el panel Herramientas para desarrolladores. Proporciona información sobre db / rendering / total times, lista de parámetros, vistas renderizadas y más.
Para usar esta extensión, debe agregar la gema
meta_request al Gemfile de su aplicación:
group :development do gem 'meta_request' end
Instale la extensión RailsPanel desde
Chrome WebStore . Esta es la forma recomendada de instalar la extensión, ya que se actualizará automáticamente en cada nueva versión.
Este es el ejemplo de rails_panel gem / extension habilitado:
Más información:4. rack-mini-profiler
Después de instalar la gema y abrir su proyecto, verá la ventana emergente en la esquina superior izquierda (se puede volver a configurar) en la página:

Después de hacer clic en él, verá información más detallada:

Como puede ver, aquí hay mucha información útil para un trabajo más eficiente. Además, funciona con aplicaciones SPA.
Más información:5. newrelic / datadog
New Relic es un
sistema de gestión del rendimiento , desarrollado por New Relic, Inc. Le proporciona información detallada sobre el rendimiento de su aplicación Rails o Ruby a medida que se
ejecuta en producción y las transmite a newrelic.com donde puede
monitorearlas en tiempo real . (TAMBIÉN TIENEN UNA CUENTA SIN PAGO)
Datadog como alternativa también es una muy buena opción. Proporcionan la misma funcionalidad que New Relic. Simplemente verifique sus posibilidades, interfaz de usuario, precios y elija lo que prefiera.
Más información:Gracias por leer!