Logs do Rails e stack traces
Este curso trata de dois tipos de registro que um app Rails deixa: o log de desenvolvimento e os stack traces do Ruby. Começa pelo log/development.log e pela saída padrão que o app usa em produção. Depois detalha as linhas Started, Processing by, Parameters e Completed, e acompanha uma requisição interrompida por um filtro before_action. A segunda metade lê o backtrace de um NoMethodError, separa o frame do app dos frames de gems e define uma ordem de leitura: classe e mensagem da exceção primeiro, depois o primeiro frame fora de /gems/.
O que você vai aprender
- ✓Onde o Rails grava logs em desenvolvimento e em produção
- ✓O que cada linha Started, Processing by, Parameters e Completed informa
- ✓Como ler uma requisição interrompida por um filtro before_action e redirecionada
- ✓Como um backtrace do Ruby é ordenado e o que cada linha de frame contém
- ✓Como achar o frame do próprio app entre frames de gems pelo trecho /gems/ do caminho
- ✓Por que ler a classe e a mensagem da exceção antes de qualquer linha do backtrace
Onde os logs do Rails ficam
Uma requisição falha em algum lugar, sem dev tools do navegador abertas e sem ninguém olhando. O Rails registrou o que aconteceu mesmo assim, num arquivo de texto simples. Deste projeto:
Ler a aula completa grátis →Currículo
7 aulasOnde os logs do Rails ficam
O desenvolvimento grava cada requisição, query e exceção em log/development.log, e a produção deste app usa a saída padrão.
Anatomia de uma linha de log
Detalha as linhas Started, Processing by, Parameters e Completed, incluindo status, tempos e contagem de queries.
Acompanhando uma requisição, do início ao fim
Acompanha uma requisição parada pelo filtro require_login, redirecionada ao login e concluída como 302 sem nenhuma query.
O que um stack trace realmente é
Mostra o backtrace como lista ordenada das chamadas de método ativas e compara a leitura de cima e de baixo.
Encontrando seu código no trace
Acha o único frame do app num trace de umas quinze linhas procurando o primeiro caminho fora de um diretório /gems/.
A primeira linha para realmente ler
Lê primeiro a classe e a mensagem da exceção, com um NoMethodError e um RoutingError que não tem backtrace.
Juntando tudo: lendo uma falha real
Revisa cada aula e aplica a ordem de leitura completa ao NoMethodError para saber o que quebrou e onde.