简体   繁体   中英

Rails 3 - Customizing the Error & 404 pages

I'm building a Rails 3 app on Heroku. Right now my error pages and 404 page are all standard rails/heroku pages.

I'd like to customize these two. Have a page for an error, and have a page for a 404.

All the tutorials found on google are years old, and don't work on Rails 3.

Can you please suggest a good modern tutorial or tips on how to do the above?

Thanks

If you want to capture specific errors, use rescue_from in ApplicationController .

Otherwise if you just want to edit the default error pages, edit the 500.html and 400.html files in {Rails.root}/public

2013 update for Rails 3.2 from Jose Valim

When Rails 3.0 came out, one of the features that people suddenly missed was the ability to better handle exceptions. The issue was: since Rails 3 became a lot more Rack “fluent”, we had to move some features to the middleware stack and this forced us to move the whole exceptions handling as well. Rails 3.2 attempts to bring some customization back to the game by allowing you to set your own exceptions rack application that is invoked when a failure happens. For instance, you could set the exceptions application to your own router in your config/application.rb:

config.exceptions_app = self.routes

Now, every time there is an exception, your router is going to be invoked. Therefore, to render custom 404 pages, you could simply add to your router:

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

And implement the logic in the controller as you wish! However, there are a few things to keep in mind if you go down this road:

  1. You need to use match in your routes and not get/post/put/delete because such exceptions can happen in any HTTP request;
  2. You won't be able to see your custom exceptions in development unless you set config.consider_all_requests_local to false in your config/environments/development.rb. The reason is, if the request is considered local, Rails will always favor to show the debug exceptions page; [or run rails server -e production ]
  3. You can always access the original exception in the controller at env["action_dispatch.exception"];
  4. It is not possible to set cookies, the session nor the flash after an exception happens. They all were already serialized back to the client;
  5. Finally, the default exceptions application used by Rails that simply renders a page in public/STATUS.html is available here: action_dispatch/middleware/public_exceptions.rb

Remember that whatever you do in the errors controller, it should not be anything “fancy”. Keep it simple because something already went wrong with your application!

Well rails3 still uses the same 404.html, 422.html and 500.html in the public folder. You can customize those.

If you're talking about actually catching these exceptions, and doing some dynamic stuff, I think the basic functionality is the same, have some around_filter that catches your particular exception in application_controller ie ActiveRecord::RecordNotFound and do something with that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM