Lista básica de gemas para perfilar la aplicación Ruby on Rails

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.

 # Each of these settings defaults to true # Detect N+1 queries Bullet.n_plus_one_query_enable = false # Detect eager-loaded associations which are not used Bullet.unused_eager_loading_enable = false # Detect unnecessary COUNT queries which could be avoided # with a counter_cache Bullet.counter_cache_enable = false 



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#index as HTML Users::User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 10014 LIMIT 1 Query Trace: app/controllers/concerns/user_stack.rb:44:in `peek' Clubs::Club Load (1.7ms) SELECT `clubs`.* FROM `clubs` WHERE `clubs`.`id` = 15 LIMIT 1 Query Trace: app/controllers/concerns/user_aware.rb:38:in `current_club' 

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 # or 2, something not big 

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:

imagen

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!

Source: https://habr.com/ru/post/482330/


All Articles