1. Create an ErrorsController in app/controllers
class ErrorsController < ApplicationController
def not_found
respond_to do |format|
format.html { render template: “errors/not_found”,
layout: “layouts/application”,
status: 404 }
end
end
def not_found
respond_to do |format|
format.html { render template: “errors/not_found”,
layout: “layouts/application”,
status: 404 }
end
end
def server_error
respond_to do |format|
format.html { render template: “errors/server_error”,
layout: “layouts/application”,
status: 500 }
end
end
end
2. Add these to your routes.rb file
match “/404”, :to => “errors#not_found”, :via => :all
match “/500”, :to => “errors#internal_server_error”, :via => :all
match “/500”, :to => “errors#internal_server_error”, :via => :all
3. Add this to your application.rb file
config.exceptions_app = self.routes
4. Delete public/404.html, public/422.html, and public/500.html
5. Remember while developing you should change this to false in config/environments/development.rb
config.consider_all_requests_local = false
If you fail to perform this step, Rails will show you full stacktraces instead of your error page.
Sample app can be found here
Your point of view caught my eye and was very interesting. Thanks. I have a question for you.