diff options
| -rw-r--r-- | actionpack/CHANGELOG.md | 16 | ||||
| -rw-r--r-- | actionpack/lib/action_controller/log_subscriber.rb | 3 | ||||
| -rw-r--r-- | actionpack/lib/action_dispatch/middleware/exception_wrapper.rb | 6 | ||||
| -rw-r--r-- | actionpack/test/controller/log_subscriber_test.rb | 15 | 
4 files changed, 32 insertions, 8 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index f9af8934fd..39105c5ca3 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,17 +1,21 @@  ## Rails 4.0.0 (unreleased) ## +*   Fix #7646, the log now displays the correct status code when an exception is raised. + +    *Yves Senn* +  *   Allow pass couple extensions to ActionView::Template.register_template_handler call. *Tima Maslyuchenko* -*   Sprockets integration has been extracted from Action Pack and the `sprockets-rails`  +*   Sprockets integration has been extracted from Action Pack and the `sprockets-rails`      gem should be added to Gemfile (under the assets group) in order to use Rails asset -    pipeline in future versions of Rails.  +    pipeline in future versions of Rails.      *Guillermo Iguaran* -*   `ActionDispatch::Session::MemCacheStore` now uses `dalli` instead of the deprecated  -    `memcache-client` gem. As side effect the autoloading of unloaded classes objects  -    saved as values in session isn't supported anymore when mem_cache session store is  -    used, this can have an impact in apps only when config.cache_classes is false.  +*   `ActionDispatch::Session::MemCacheStore` now uses `dalli` instead of the deprecated +    `memcache-client` gem. As side effect the autoloading of unloaded classes objects +    saved as values in session isn't supported anymore when mem_cache session store is +    used, this can have an impact in apps only when config.cache_classes is false.      *Arun Agrawal + Guillermo Iguaran* diff --git a/actionpack/lib/action_controller/log_subscriber.rb b/actionpack/lib/action_controller/log_subscriber.rb index a7c0e971e7..f41d1bb4b9 100644 --- a/actionpack/lib/action_controller/log_subscriber.rb +++ b/actionpack/lib/action_controller/log_subscriber.rb @@ -19,7 +19,8 @@ module ActionController        status = payload[:status]        if status.nil? && payload[:exception].present? -        status = ActionDispatch::ExceptionWrapper.new({}, payload[:exception]).status_code +        exception_class_name = payload[:exception].first +        status = ActionDispatch::ExceptionWrapper.status_code_for_exception(exception_class_name)        end        message = "Completed #{status} #{Rack::Utils::HTTP_STATUS_CODES[status]} in %.0fms" % event.duration        message << " (#{additions.join(" | ")})" unless additions.blank? diff --git a/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb b/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb index 7349b578d2..ae38c56a67 100644 --- a/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb +++ b/actionpack/lib/action_dispatch/middleware/exception_wrapper.rb @@ -37,7 +37,7 @@ module ActionDispatch      end      def status_code -      Rack::Utils.status_code(@@rescue_responses[@exception.class.name]) +      self.class.status_code_for_exception(@exception.class.name)      end      def application_trace @@ -52,6 +52,10 @@ module ActionDispatch        clean_backtrace(:all)      end +    def self.status_code_for_exception(class_name) +      Rack::Utils.status_code(@@rescue_responses[class_name]) +    end +      private      def original_exception(exception) diff --git a/actionpack/test/controller/log_subscriber_test.rb b/actionpack/test/controller/log_subscriber_test.rb index 700fd788fa..a72b6dde1a 100644 --- a/actionpack/test/controller/log_subscriber_test.rb +++ b/actionpack/test/controller/log_subscriber_test.rb @@ -54,6 +54,10 @@ module Another      def with_rescued_exception        raise SpecialException      end + +    def with_action_not_found +      raise AbstractController::ActionNotFound +    end    end  end @@ -225,6 +229,17 @@ class ACLogSubscriberTest < ActionController::TestCase      assert_match(/Completed 406/, logs.last)    end +  def test_process_action_with_with_action_not_found_logs_404 +    begin +      get :with_action_not_found +      wait +    rescue AbstractController::ActionNotFound +    end + +    assert_equal 2, logs.size +    assert_match(/Completed 404/, logs.last) +  end +    def logs      @logs ||= @logger.logged(:info)    end  | 
