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