2010-11-23 3 views
27

Je construis une application Rails 3 sur Heroku. En ce moment, mes pages d'erreur et la page 404 sont toutes des rails standards/pages d'heroku.Rails 3 - Personnalisation de l'erreur & 404 pages

Je voudrais personnaliser ces deux. Une page pour une erreur et une page pour un 404.

Tous les tutoriels trouvés sur Google sont ans, et ne fonctionnent pas sur Rails 3.

Pouvez-vous s'il vous plaît suggérer un bon tutoriel moderne ou des conseils sur la façon de faire ce qui précède?

Merci

Répondre

36

Si vous souhaitez capturer des erreurs spécifiques, utilisez rescue_from dans ApplicationController.

Sinon, si vous voulez juste modifier les pages d'erreur par défaut, modifiez le 500.html et fichiers 400.html dans {Rails.root}/publique

3

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

Si vous parlez en fait attraper ces exceptions, et de faire des choses dynamiques, je pense que la fonctionnalité de base est le même, avoir une around_filter qui attire votre exception particulière dans application_controller-à-dire ActiveRecord::RecordNotFound et faire quelque chose avec ça.

11

2013 mise à jour pour Rails 3.2 de Jose Valim

Lorsque Rails 3.0 est sorti, l'une des fonctionnalités que les gens ont manqué soudainement était la possibilité de mieux gérer les exceptions. Le problème était le suivant: depuis que Rails 3 est devenu beaucoup plus «fluide», nous avons dû déplacer certaines fonctionnalités vers la pile middleware, ce qui nous a obligé à déplacer la gestion des exceptions. Rails 3.2 tente de ramener une certaine personnalisation au jeu en vous permettant de définir votre propre application en rack d'exception qui est invoquée lorsqu'une défaillance survient. Par exemple, vous pouvez définir l'application des exceptions à votre propre routeur dans votre config/application.rb:

config.exceptions_app = self.routes 

Maintenant, chaque fois qu'il ya une exception, votre routeur va être invoqué. Par conséquent, pour rendre les pages personnalisées 404, vous pouvez simplement ajouter à votre routeur:

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

et mettre en œuvre la logique du contrôleur que vous le souhaitez! Cependant, il y a quelques petites choses à garder à l'esprit si vous allez sur cette route:

  1. Vous devez utiliser correspondance dans vos itinéraires et ne pas obtenir/post/put/supprimer parce que ces exceptions peuvent se produire dans toute HTTP demande;
  2. Vous ne pourrez pas voir vos exceptions personnalisées dans le développement à moins que vous définissiez config.consider_all_requests_local sur false dans votre config/environments/development.rb.La raison en est que, si la requête est considérée comme locale, Rails favorisera toujours l'affichage de la page d'exceptions de débogage; [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, la session ni le flash après une exception se produit. Ils ont tous déjà été remis en série au client ;
  5. Enfin, l'application des exceptions par défaut utilisée par Rails qui rend simplement une page en public/status.html est disponible ici: action_dispatch/middleware/public_exceptions.rb

Rappelez-vous que tout ce que vous faites dans les erreurs contrôleur, il ne devrait pas être quelque chose de "fantaisie". Restez simple car quelque chose s'est déjà mal passé avec votre application!