27 votes

Rails 3 - Personnalisation de l'Erreur 404 pages

Je suis en train de construire un Rails 3 application sur Heroku. Droit maintenant, mes pages d'erreur 404 page sont tous les types de rails ou de heroku pages.

J'aimerais personnaliser ces deux. Avoir une page pour une erreur, et avoir une page 404.

Tous les tutoriels trouvés sur google ans, et ne pas travailler sur des Rails 3.

Pouvez-vous me suggérer un bon moderne tutoriel ou des conseils sur la façon de le faire ci-dessus?

Merci

36voto

Ryan Bigg Points 64561

Si vous voulez capturer les erreurs spécifiques, utilisez rescue_from en ApplicationController.

Sinon, si vous souhaitez simplement modifier la valeur par défaut des pages d'erreur, modifier la 500.html et 400.html fichiers dans {Rails.racine}/public

11voto

NielsH Points 477

J'ai trouvé ce tutoriel très utile:

http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error-pages

10voto

Abram Points 3501

2013 mise à jour pour les Rails 3.2 de Jose Valim

Lors de Rails 3.0, l'une des caractéristiques qui, d'un seul coup manqué a la capacité de mieux gérer les exceptions. La question est: depuis Rails 3 est devenu beaucoup plus de Rack "fluent", nous avons eu à déplacer certaines caractéristiques de la pile de middleware et cela nous a obligés à déplacer l'ensemble de la gestion des exceptions, ainsi. Rails 3.2 tente d'apporter un certain degré de personnalisation de retour au jeu en vous permettant de définir vos propres exceptions application de rack qui est appelée lorsqu'une défaillance se produit. Par exemple, vous pouvez définir les exceptions de l'application à votre propre routeur dans votre config/application.rb:

config.exceptions_app = self.routes

Désormais, à chaque fois il y a une exception, votre routeur va être invoquée. Par conséquent, pour rendre les pages d'erreur 404 personnalisées, vous pouvez simplement ajouter à votre routeur:

match "/404", :to => "errors#not_found"

Et de mettre en œuvre la logique du contrôleur que vous le souhaitez! Cependant, il ya quelques choses à garder à l'esprit si vous allez en bas de cette route:

  1. Vous devez utiliser la correspondance dans vos itinéraires et pas get/post/put/delete parce que de telles exceptions peuvent se produire dans toute requête HTTP;
  2. Vous ne serez pas en mesure de voir votre personnalisé exceptions dans le développement sauf si vous définissez config.consider_all_requests_local à false dans votre config/environments/développement.rb. La raison en est que, si la demande est considéré comme local, Rails privilégie toujours à montrer le débogage page des exceptions; [ou exécutez rails server -e production]
  3. Vous pouvez toujours accéder à l'exception d'origine dans le contrôleur env["action_dispatch.exception"];
  4. Il n'est pas possible de définir des cookies de session, ni le flash après une exception se produit. Ils étaient tous déjà sérialisé retour à la client;
  5. Enfin, la valeur par défaut exceptions application utilisée par les Rails simplement rend une page dans public/STATUS.html est disponible ici: action_dispatch/middleware/public_exceptions.rb

Rappelez-vous que quoi que vous fassiez dans les erreurs du contrôleur, il ne devrait pas être quelque chose de "fantaisie". Garder les choses simples parce que quelque chose allait déjà mal avec votre application!

3voto

brad Points 11382

Bien rails3 utilise toujours la même 404.html, 422.html et 500.html dans le dossier public. Vous pouvez personnaliser ces.

Si vous parlez en fait la capture de ces exceptions, et en faisant quelques dynamique de trucs, je pense que la fonctionnalité de base est la même, avoir quelques around_filter qui attire votre exception particulière en application_controller ie ActiveRecord::RecordNotFound et en faire quelque chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X