app/controllers/umlaut/error_handling.rb in umlaut-3.0.5 vs app/controllers/umlaut/error_handling.rb in umlaut-3.1.0.pre1

- old
+ new

@@ -1,50 +1,45 @@ # A mix-in for Rails controllers with some standard error recovery -# logic. +# logic. module Umlaut::ErrorHandling extend ActiveSupport::Concern - + included do # Only custom errors in production unless Rails.application.config.consider_all_requests_local - # generic catch-all comes first, later ones will take priority rescue_from Exception, :with => :handle_general_error - - rescue_from ::StoreController::NotFound, ActiveRecord::RecordNotFound, :with => :handle_404_error + rescue_from ActiveRecord::RecordNotFound, :with => :handle_404_error end end - - - protected - + def handle_general_error(exception) log_error_with_context(exception) - @page_title = "Error!" - render "error", :status => 500 + # Only render this if we haven't done anything else + # e.g. if some other gem may be handling its own errors + render "error", :status => 500 unless performed? end - - # Just returns a generic 404 page. - # Uses generic 404 page already stored in public/404.html as rails convention. + protected :handle_general_error + + # Just returns a generic 404 page. + # Uses generic 404 page already stored in public/404.html as rails convention. def handle_404_error(exception=nil) - render :file=>File.join(Rails.root ,"public/404.html"), :layout=>false, :status=>404 + render :file=>File.join(Rails.root ,"public/404"), :layout=>false, :status=>404 end - - + protected :handle_404_error + def log_error_with_context(exception, severity = :fatal) message = "\n#{exception.class} (#{exception.message}):\n" message << " uri: #{request.fullpath}\n\n" - message << " params: #{params.inspect}\n\n" + message << " params: #{params.inspect}\n\n" message << " Referer: #{request.referer}\n" if request.referer message << " User-Agent: #{request.user_agent}\n" message << " Client IP: #{request.remote_addr}\n\n" - message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) # mysterious :noise param seems to match how default rails does it, so - # we actually get a backtrace. - message << " " << Rails.backtrace_cleaner.clean(exception.backtrace, :noise).join("\n ") - - logger.send(severity, "#{message}\n\n") + # we actually get a backtrace. + message << " " << Rails.backtrace_cleaner.clean(exception.backtrace, :noise).join("\n ") + logger.send(severity, "#{message}\n\n") end - -end + protected :log_error_with_context +end \ No newline at end of file