Vários usuários nos disseram recentemente que têm experiência com um manipulador de erros Rails personalizado.
Aprovado: Fortect
Lei de Murphy:
Como Murphy afirma fazer cumprir a lei Tudo o que tem a capacidade de dar errado vai dar errado, o que é exatamente tão importante estar preparado para isso. Isso se aplica a todos os lugares, mesmo na produção de software. O aplicativo que estamos desenvolvendo pode ser intenso o suficiente para lidar com isso. Em outras palavras, o jogo deve ser estável. Esse geralmente é o tópico desta postagem do blog. Se as atividades
podem dar errado, haverá uma decisão totalmente errada.
– Murphy’s … Law
No Rails, um fluxo de trabalho, hoje eu quero lidar com erros em uma instrução de nível. Por exemplo, digamos que você esteja escrevendo uma API usando Rails. Considere o controlador a seguir como uma única alternativa para renderizar JSON customizado.
Se uma variável personalizada for encontrada, ela será renderizada como qualquer Json, caso contrário, retornará um erro json. Esta é realmente a maneira típica de escrever os métodos atuais em Rails. Mas aqui está a armadilha. Se o registro do usuário não iniciar, ele não consegue pular para o obstáculo else, mas em seu lugar exibe o conteúdo de Fallback-500.html. Bem, isso é inesperado. Isso se deve ao fato de não haver esforço. Mas, quando um registro não é encontrado, ocorre um erro específico de RecordNotFound. O mesmo que find_by! e até mesmo qualquer método Finder com um estrondo.
Exceção! Liga o bug
Antes de podermos corrigir os bugs típicos, precisamos entender algo importante. Como você pode ver no exemplo acima, nosso grupo está recebendo um erro ActiveRecord :: RecordNotFound. Tentar pegar um rubi vai parecer algo preciso, e tudo bem.
Mas se você quiser evitar exceções primeiro, o aplicativo é realmente importante no mercado para ter uma compreensão da diferença entre uma exceção e um bug do Ruby. Nunca se salve da exclusão. O objetivo é lidar com cada exceção que vem dessa classe de exceção individualmente e, por fim, encurtar o lançamento.
Em vez disso, precisamos nos resgatar sofrendo de um StandardError. Aqui está um ótimo artigo do site que explica as consequênciasEu sou http://blog.honeybadger.io/ruby-exception-vs-standarderror-whats-the-difference/.
Rescue
Para lidar com bugs reais, certamente poderíamos usar o bloqueio de travamento. O bloco de recuperação é atualmente o mesmo que o bloco try..catch se você realmente for do mundo Java. Aqui está a mesma cópia exata no ponto a com um detetive sobressalente.
Com esta abordagem, seus erros são registrados nas formas e meios do controlador. Embora tudo funcione bem, definitivamente não é a melhor abordagem para solucionar problemas. Aqui estão algumas razões para uma ótima abordagem alternativa.
- Gordura Leia seu excelente artigo da Thoughtbots https://robots.oughttbot.com/skinny-controllers- Modelos magros.
- O princípio DRY-We: basta repetir parando o próprio erro em diferentes pontos, o que viola o princípio DRY (Don’t Repeat Yourself).
- Manutenibilidade: mais complexo para gerenciar o código. Muda o erro e, sem dúvida, o formato implicaria em grandes mudanças.
Uma abordagem recuperável seria um bloco de manipulação de erros de rotação para o ApplicationController. Uma maneira mais limpa é escrever um bom treinador de módulo de erro.
Tratamento de erros – Uma abordagem modular
Para corrigir erros de layout a tempo, nossa primeira opção é sinalizá-los no ApplicationController. Mas é melhor separá-los, eu diria, da lógica de negócios.
Vamos criar uma parte que lida com erros globalmente. Crie o módulo ErrorHandler correto (error_handler.rb) e coloque-o durante lib versus erro (ou em algum lugar para fazer o download) e finalmente assegure nosso ApplicationController.Load
Importante: o módulo de erro selecionado no aplicativo é obter a expansão em config / application.rb.
Observação: ajudo vários tipos de ajuda na renderização de resultados json. Você pode conferir aqui?
Antes de começar com quase todos os módulos error_handler, aqui está um artigo interessante sobre unidades que você deve estudar completamente. Se você recorrer ao método “observe self.included” em um módulo, alguns dos métodos associados se comportam como se também tivessem sido colocados na classe original. Portanto, temos o módulo ErrorHandler, que está presente no ApplicationController.
vamos agir Vamos adicionar o ErrorModule aos blocos de tratamento de erros. Parece que inclui isso.
Se você der uma olhada nos erros ActiveRecord: RecordNotFound, StandardError também é herdado. Como temos um mecanismo especial de fallback para fazer isso, obtemos um completo: record_not_found. O StandardError neutralize atua como um único mecanismo de fallback que controla todos os erros.
Defina sua própria exceção.
Também podemos definir claramente nossa própria classe de erro que herda de StandardError. Para manter as coisas simples, podemos criar uma nova classe funcional CustomError que contém funções e equipamentos que são comuns a todas as classes definidas por erro de desgaste. Nosso erro personalizado agora estende este CustomError.
Podemos sobrescrever as configurações do sistema para o erro. O exemplo NotVisibleError estende CustomError. Como as famílias podem ver, algumas pessoas substituem error_message.
Para corrigir erros personalizados, queremos apenas fazer o resgate do cliente Error. Nós também podemos evitar o erro expresso se realmente quisermos tratá-lo de maneira diferente novamente.
404 And Can 500
manipula exceções genéricas como, por exemplo, 404 e 500, embora isso seja feito puramente para roubar para o desenvolvedor. Precisamos adquirir uma classe de controlador separada para consultar o erro.
descreve Rails para usar rotas para resolver exceções. geralmente a linha correspondente a application.rb.
config.Exceptions_app equivale a Rotas
agora causa reversão para o número de erros not_found e 500 para # internal_server_error contratempos.
Observações finais
Aprovado: Fortect
Fortect é a ferramenta de reparo de PC mais popular e eficaz do mundo. Milhões de pessoas confiam nele para manter seus sistemas funcionando de forma rápida, suave e livre de erros. Com sua interface de usuário simples e mecanismo de verificação poderoso, o Fortect localiza e corrige rapidamente uma ampla gama de problemas do Windows, desde instabilidade do sistema e problemas de segurança até gerenciamento de memória e gargalos de desempenho.
A abordagem modular é um curso do Rails sobre tratamento de erros. Sempre que quisermos alterar uma experiência / formato de erro específico, nos reservamos o direito de transformar isso em nossa decisão. Com essa abordagem, nossa organização também desacopla a lógica de aplicativo mais importante fornecida pelo tratamento de erros, tornando os controladores suaves em vez de apenas arrogantes. Os melhores
trilhos de trem destinados a controladores e modelos finos.
Este é o código-fonte completo do software quando se trata de tratamento de erros de maneira modular. Clique no botão “Recomendar” se alguém o considerar útil. E você sempre pode responder, embora tenha dúvidas práticas. Bravo modular!
Abordagem para remover obstáculos nas trilhas.
Acelere o desempenho do seu computador agora com este simples download.