Recevoir des rapports d'erreurs par courriel
Une façon pratique d'être informé lorsqu'une erreur critique survient est d'utiliser la fonction rescue_action_in_public. Cette fonction est exécutée automatiquement lorsqu'une exception est détectée.
On peut la placer dans n'importe quel controlleur ou simplement la définir globalement dans le controlleur d'application.
La fonction peut être modifiée afin qu'elle envoi un courriel lorsqu'une erreur critique survient. Le livre Agile Web Development with Rails contient un exemple intéressant:
Ça fonctionne. Maintenant Rails cherche la classe UnknownAction dans le bon chemin, soit ActionController::UnknownAction. Sauf qu'au niveau de la syntaxe, je ne suis pas encore certain de comprendre la différence entre ...
On peut la placer dans n'importe quel controlleur ou simplement la définir globalement dans le controlleur d'application.
La fonction peut être modifiée afin qu'elle envoi un courriel lorsqu'une erreur critique survient. Le livre Agile Web Development with Rails contient un exemple intéressant:
Malheureusement ce code me retourne l'erreur suivante sur mon serveur de développement (Ruby 1.8.4, Rails 1.1.2):
def rescue_action_in_public(exception)
case exception
when ActiveRecord::RecordNotFound, ActionController::UnknownAction
render(:file => "#{RAILS_ROOT}/public/404.html",
:status => "404 Not Found")
else
render(:file => "#{RAILS_ROOT}/public/500.html",
:status => "500 Error")
SystemNotifier.deliver_exception_notification(
self, request, exception)
end
end
end
uninitialized constant UnknownActionJe me suis rendu compte que Rails utilise le chemin invalide suivant...
ActionWebService::Dispatcher::ActionController::UnknownActionalors que UnknownAction se trouve dans ....
ActionController::UnknownActionEn cherchant un peu, j'ai trouvé ce message qui suggère de remplacer ActionController::UnknownAction par ::ActionController::UnknownAction.
Ça fonctionne. Maintenant Rails cherche la classe UnknownAction dans le bon chemin, soit ActionController::UnknownAction. Sauf qu'au niveau de la syntaxe, je ne suis pas encore certain de comprendre la différence entre ...
ActionController::UnknownAction.. et ..
::ActionController::UnknownAction
