Comment accéder à la page d'erreur d'invite unifiée lorsque vous rencontrez des erreurs dans Rails

2020-05-23

Un site Web en développement itératif comportera inévitablement des bogues. L'expérience client sera très mauvaise lorsqu'un bogue se produit. Pour résoudre ce problème, vous pouvez déclencher un saut vers la page d'invite unifiée lorsque l'erreur de classe se produit et la transmettre au développeur. Envoyez des messages d'erreur par e-mail pour améliorer les capacités de test et l'expérience utilisateur. Voici la méthode principale; ajoutez le code suivant dans ApplicationController, l'erreur de classe des différentes versions de rails change légèrement.


copiez le code le code est le suivant:


AR_ERROR_CLASSES = [ActiveRecord :: RecordNotFound, ActiveRecord :: StatementInvalid]
   ERROR_CLASSES = [NameError, NoMethodError, RuntimeError,
          ActionView :: TemplateError,
          ActiveRecord :: StaleObjectError, ActionController :: RoutingError,
          ActionController :: UnknownController, AbstractController :: ActionNotFound,
          ActionController :: MethodNotAllowed, ActionController :: InvalidAuthenticityToken]
  
   ACCESS_DENIED_CLASSES = [CanCan :: AccessDenied]
  
   si Rails.env.production?
     rescue_from * AR_ERROR_CLASSES ,: avec =>: render_ar_error
     rescue_from * ERROR_CLASSES ,: avec =>: render_error
     rescue_from * ACCESS_DENIED_CLASSES ,: avec =>: render_access_denied
   fin
    
   #appelé par la dernière route correspondant aux routes inégalées. Lève RoutingError qui sera sauvé de la même manière que les autres exceptions.
  
#Remarks Après Rails3.1, ActionController :: RoutingError ajoute le code suivant à routes.rb pour intercepter.
# rails3Next: match '* unmatched_route',: to => 'application # raise_not_found!'
Sous # rails4: obtenez '* unmatched_route',: vers => 'application # raise_not_found!'
  
   def raise_not_found!
     augmenter ActionController :: RoutingError.new ("Aucun itinéraire ne correspond à # {params [: unmatched_route]}")
   fin
  
   def render_ar_error (exception)
     exception de cas
     lorsque * AR_ERROR_CLASSES alors exception_class = exception.class.to_s
     else exception_class = 'Exception'
     fin
  
     send_error_email (exception, exception_class)
   fin
  
   def render_error (exception)
     exception de cas
     lorsque * ERROR_CLASSES alors exception_class = exception.class.to_s
     else exception_class = 'Exception'
     fin
  
     send_error_email (exception, exception_class)
   fin
  
   def render_access_denied (exception)
     exception de cas
     lorsque * ACCESS_DENIED_CLASSES alors exception_class = exception.class.to_s
     else exception_class = "Exception"
     fin
  
     send_error_email (exception, exception_class)
   fin

www.xd1998.com@2001-2030Partage De Technologie