Ignorar erros
A configuração do AppSignal torna possível ignorar erros. Ao fornecer uma lista de erros específicos, o AppSignal não enviará alertas quando esses erros forem levantados.Tratamento de exceções
Apenas ignorar um erro silenciará as notificações, mas poderia potencialmente ocultar um problema maior. Por essa razão, recomendamos que você adicione tratamento de exceções com blocosbegin .. rescue em sua aplicação.
Usando begin .. rescue você pode capturar exceções específicas e adicionar um
caminho de código alternativo para quando uma exceção ocorre, como renderizar páginas 404
ou fornecer ao usuário mensagens de erro mais detalhadas sobre o que deu errado.
Rails rescue_from
O Rails fornece um mecanismo para tratar exceções no nível do controller. Ao definir uma declaraçãorescue_from para um erro específico, é possível criar
um caminho de código alternativo para quando essa exceção é levantada. Como isso pode ser
definido em qualquer nível de controller, isso possibilita adicionar tratamento de exceções
em nível de aplicação.
rescue_from podem ser encontradas no guia do Rails sobre
ActionController.
Lidar com 404s
Se um visitante acessar uma URL que não pode ser tratada pelo seu roteamento ou controller, o Rack e outros frameworks levantarão uma exceção. Geralmente é uma boa ideia tratar essas exceções com uma resposta 404 para seus usuários. Em controllers em que uma operaçãofind é realizada com base em um parâmetro de
uma URL, recomenda-se que você trate ActiveRecord::RecordNotFound (ou o
equivalente no seu ORM de escolha) para também mostrar uma resposta 404. No entanto, isso pode ocultar
bugs reais, então deve ser feito com cuidado.
Lidar com tokens de autenticidade inválidos
O Rails tem um mecanismo que protege seus formulários de serem preenchidos por bots com muita facilidade. Sempre que um formulário é postado sem um token de autenticidade correto, umActionController::InvalidAuthenticityToken será levantado.
Às vezes, usuários legítimos também podem encontrar esses erros, então é uma boa
ideia ter uma página de erro separada explicando o que deu errado. Aconselhamos
retornar essa página com uma resposta 422 (Unprocessable Entity).
Lidar com tentativas de hacking
Você pode ter erros porque bots ou hackers estão tentando explorar problemas de segurança como o notório exploit do YAML. Versões mais recentes do Rails levantarão umHash::DisallowedType quando isso acontecer. Um RangeError também é frequentemente resultado
de uma tentativa de hacking. Você poderia capturar esses tipos de erros e retornar uma resposta 403
(Forbidden).
Métodos helper de reporte de exceções
O AppSignal fornece uma única interface para reportar exceções comAppsignal.report_error.
Se sua aplicação está usando a versão 3 ou mais antiga da gem Ruby, veja a seção de tratamento de exceções legado.
Appsignal.report_error
Aplicações podem ter tratamento de exceções onde não querem fazer o processo Ruby crashar. Ao adicionar tratamento de exceções, a exceção não vai mais propagar até a instrumentação do AppSignal. O AppSignal não reportará essas exceções. Se você quiser reportar a exceção sem fazer a aplicação crashar, use o helperAppsignal.report_error para reportá-la ao AppSignal de dentro do tratamento de exceções.
Se uma Transaction do AppSignal estiver ativa, este helper adicionará a exceção à Transaction atual. As aplicações podem reportar múltiplas exceções em uma Transaction.
Se nenhuma Transaction estiver ativa, este helper criará uma nova Transaction e reportará a exceção na Transaction recém-criada. O AppSignal sempre reportará a exceção dessa forma ao usar Appsignal.report_error.
Adicionando metadados
Personalizar os metadados na Transaction para a exceção é possível passando um bloco para o helperAppsignal.report_error. Veja nossos guias de Tagging e Personalização de dados para mais informações sobre que tipo de dados podem ser adicionados neste bloco.
Os metadados definidos no bloco do Appsignal.report_error só se aplicam à exceção fornecida ao helper. Metadados definidos fora dos blocos do Appsignal.report_error são adicionados a todas as exceções se houver uma transaction ativa.
Reportando múltiplas exceções
Múltiplos erros podem ser reportados em uma Transaction, como uma action de controller do Rails tratando uma requisição HTTP ou um background job do Sidekiq. Um máximo de 10 erros pode ser definido em uma Transaction. Se várias exceções forem reportadas em uma Transaction, os metadados definidos no bloco doAppsignal.report_error só se aplicam à exceção fornecida ao helper. Metadados definidos fora dos blocos do Appsignal.report_error são adicionados a todas as exceções.
Reportar exceções que crasham um processo
Por padrão, o AppSignal reportará exceções que crasham um processo Ruby, desde que o AppSignal seja iniciado antes da exceção ocorrer.enable_at_exit_reporter como false.
Processos Ruby de curta duração
Ao reportar exceções de scripts Ruby, tarefas Rake, processos Ruby de curta duração, leia a documentação nessas páginas sobre quando chamarAppsignal.stop para garantir que todas as exceções sejam reportadas ao AppSignal.
Tratamento de exceções legado
Leia esta seção ao usar a gem AppSignal para Ruby versão 3 ou anterior. Para versões mais recentes da nossa gem Ruby, use o helperAppsignal.report_error.
O AppSignal fornece dois métodos helper de reporte de exceções. Qual você usa dependerá do contexto do erro. Os métodos são:
set_error: O helperset_errordefine o erro na Transaction atualmente ativa. Se nenhuma transaction estiver ativa, nenhum erro é reportado. Definir um erro na transaction atualmente ativa sobrescreve qualquer erro previamente definido na transaction.send_error: Usesend_errorpara reportar erros quando nenhuma transaction do AppSignal estiver ativa.
Appsignal.set_error
Existem cenários em que você tem seu próprio tratamento de exceções e não quer fazer o processo Ruby crashar. Ao adicionar seu próprio tratamento de exceções, o erro não é mais propagado até a integração do AppSignal e, portanto, não é registrado automaticamente. Se você ainda quiser rastrear o erro, pode usarAppsignal.set_error para adicionar a exceção à Transaction atual do AppSignal. O erro será registrado no AppSignal, mas seu processo não vai crashar.
set_error só funciona quando há uma transaction do AppSignal ativa. Caso contrário, o erro será ignorado. Uma transaction está ativa na maioria das nossas integrações suportadas automaticamente e ao usar Appsignal.monitor ou Appsignal.monitor_transaction. Para mais informações sobre quando usar Appsignal.monitor_transaction, veja nosso guia de instrumentação para scripts e background jobs.
Veja Appsignal.send_error para enviar erros sem uma transaction do AppSignal.
Appsignal.send_error
O AppSignal fornece um mecanismo para enviar erros ao AppSignal sem precisar iniciar uma transaction. Isso é útil para rastrear erros que ocorrem em código que não está em um contexto de web ou background job, como tarefas Rake ou scripts Ruby separados. Isso é útil para instrumentação que não cria automaticamente transactions do AppSignal para perfilar, como nossas integrações. Você pode usar o métodoAppsignal.send_error para enviar diretamente uma exceção ao AppSignal de qualquer lugar do seu código sem primeiro iniciar uma transaction do AppSignal com Appsignal.monitor.
Adicionando metadados
Na gem AppSignal para Ruby 2.9 e mais nova, um bloco adicional pode ser passado ao métodoAppsignal.send_error para adicionar mais metadados à transaction de erro. Isso inclui metadados como o nome da action e parâmetros. Versões mais antigas da gem Ruby não permitirão que metadados adicionais sejam definidos.
Appsignal.listen_for_error
Uma forma alternativa de rastrear erros com o AppSignal é envolver código que pode levantar uma exceção em um blocolisten_for_error. Se uma exceção for levantada
dentro desse bloco, ela é automaticamente rastreada pelo AppSignal e re-lançada. Isso
permite que a aplicação e os frameworks tratem a exceção normalmente.