Custom error pages directly from your app are far better than hand-made pages or those that rails gives you by default. But if they use your controllers/helpers they may send a user into a crash-loop (arriving on /500 and boom-> /500…)
So simple add an errors controller, build some templates(name is e500, since” def 500″ will not work), set them to page caching and ping them after each deploy.
#routes.rb as lat rule %w[500 404 422].each do |error| map.connect error, :controller=>'errors', :action=>"e#{error}" end #errors_controller.rb class ErrorsController < ActionController::Base helper :all layout 'blank' #new layout, without dynamic gimmicks caches_page 'e500', 'e404', 'e422' #no authentification, so just nil def current_user nil end helper_method :current_user end #e500.html.erb <h1>BOOM!</h1> #deploy.rb task :ping_error_pages do %w[500 404 422].each do |error| run "wget -O /dev/null localhost/#{error} --quiet" end end after "deploy:restart", *%w( rs:ping_error_pages ... )