Lista de gemas básicas para criação de perfil do aplicativo Ruby on Rails

Mesmo a maioria dos desenvolvedores experientes do Ruby on Rails às vezes se esquece de erros irritantes que produzem nos longos processos de desenvolvimento, como consultas n + 1 ou perde muito tempo com algumas consultas inesperadas do nada.

Nem todos esses erros podem ser evitados antes da produção, mas pelo menos você pode tentar :)

Sim, essa é outra lista de gemas esquecidas ou não tão populares para os melhores processos de desenvolvimento.
Vamos começar.

1. Bala


Bullet - uma das soluções mais populares e mais fáceis para combater com n + 1 consultas.

Essa gema fornece maneiras diferentes de mostrar que algumas consultas não são eficientes. Navegador (log do console), log de desenvolvimento, arquivo de saída. Minha escolha é apenas usar um log de desenvolvimento, porque não é tão irritante (alguns problemas estão aparecendo apenas a tempo ou não podem ser resolvidos facilmente com a arquitetura atual).

Como funciona : você tem, por exemplo, solicitação de índice para algum modelo ( serviços ). E este modelo tem muitas relações diferentes ( serviços tem_muitos grupos ), eles também têm relações .. ( grupos tem_muitos usuários , usuários tem_muitos logotipos , etc). E isso pode causar o carregamento ineficiente repetido de dados ( n + 1 ). Você deseja mostrar o logo_url e ele começa a criar consultas desnecessárias para todos os usuários (às vezes você vê imediatamente, outras vezes não é tão claro). Na maioria dos casos, o bullet lançará as próximas linhas nos seus logs de desenvolvimento:

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 você pode ver, ele mostra a solicitação, o que foi encontrado (carregamento rápido), modelo e o que exatamente foi carregado várias vezes. E pilha de chamadas, é claro.

Bom começo!



O Bullet pode encontrar carregamento ansioso não utilizado e contadores de caches. E permite desativar qualquer um de seus 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 



Nos meus projetos, prefiro desativar as consultas de carregamento antecipado não utilizadas, porque é uma situação comum quando um serviço de modelo de carregamento é usado em muitos locais e, para locais diferentes, você não precisa pré-carregar algumas relações que são claramente necessárias em outros lugares. E esta situação é muito irritante no final. É melhor pré-carregar algumas informações e esquecer de carregá-las corretamente em algum lugar.

Minha configuração (em development.rb ):

 config.after_initialize do Bullet.enable = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end 

Mais informações :


2. ActiveRecordQueryTrace (active_record_query_trace)


active_record_query_trace - uma jóia que registra / exibe um backtrace de todas as consultas SQL executadas pelo Active Record

(Acabei de copiar a parte da descrição da página do Github porque eles têm tudo o que você precisa saber)

Exibe um backtrace para cada consulta no console e no log de desenvolvimento do Rails. Permite rastrear onde as consultas são executadas no seu aplicativo. Útil para otimizações de desempenho e para descobrir por onde começar ao fazer alterações em um aplicativo grande.

Quando ativada, todas as consultas serão registradas 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' 

Do meu lado, quero dizer que essa gema é muito útil quando você começa a trabalhar no projeto, não desde o início, e não sabe como tudo está funcionando (ou apenas com os recursos dos colegas), e algumas chamadas de consulta não são facilmente compreensíveis. Isso poderia economizar muito tempo, realmente.

Também uma pequena nota:
Para cada consulta do ActiveRecord, haverá um backtrace adicional no arquivo de log. Por padrão, é 5, o que é grande o suficiente para tornar seus logs totalmente ilegíveis.
Mas pode ser controlado:

 ActiveRecordQueryTrace.lines = 1 # or 2, something not big 

Mais informações:


3.rails_panel


O RailsPanel é uma extensão do Chrome para o desenvolvimento do Rails que encerrará o desenvolvimento de development.log . Tenha todas as informações sobre suas solicitações de aplicativos Rails no navegador - no painel Ferramentas do desenvolvedor. Fornece informações para tempos de db / rendering / total, lista de parâmetros, visualizações renderizadas e muito mais.

Para usar esta extensão, você precisa adicionar a meta_request gem ao Gemfile do seu aplicativo:

 group :development do gem 'meta_request' end 

Instale a extensão RailsPanel na Chrome WebStore . Essa é a maneira recomendada de instalar a extensão, pois será atualizada automaticamente a cada nova versão.

Este é o exemplo da jóia / extensão rails_panel ativada:

imagem

Mais informações:


4. mini-perfilador de rack


Depois de instalar a gema e abrir o seu projeto, você verá o pop-up no canto superior esquerdo (pode ser reconfigurado) na página:



Depois de clicar nele, você verá informações mais detalhadas:



Como você pode ver, aqui estão muitas informações úteis para um trabalho mais eficiente. Além disso, ele funciona com aplicativos SPA.

Mais informações:


5. newrelic / datadog


New Relic é um sistema de gerenciamento de desempenho , desenvolvido pela New Relic, Inc. Ele fornece informações detalhadas sobre o desempenho do seu aplicativo Rails ou Ruby, enquanto ele é executado na produção e os transmite para o newrelic.com, onde você pode monitorá-los em tempo real . (TAMBÉM TÊM CONTA NÃO PAGA)

Datadog como alternativa também é uma escolha muito boa. Eles fornecem a mesma funcionalidade que a New Relic. Basta verificar suas possibilidades, interface do usuário, preços e escolher o que você preferir.

Mais informações:


Obrigado pela leitura!

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


All Articles