aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDieter Komendera <dieter@komendera.com>2014-12-09 10:55:58 +0100
committerDieter Komendera <dieter@komendera.com>2014-12-10 22:13:13 +0100
commit2fde159f6b22fa45f132ba25c48eb3c371ead949 (patch)
tree0a75df25566bf19a0848711ea221051949f2cdbb
parentefe80bce9765f7fcc1d09338a212f8ea1c4d7a7a (diff)
downloadrails-2fde159f6b22fa45f132ba25c48eb3c371ead949.tar.gz
rails-2fde159f6b22fa45f132ba25c48eb3c371ead949.tar.bz2
rails-2fde159f6b22fa45f132ba25c48eb3c371ead949.zip
Ensure append_info_to_payload is called even if an exception is raised.
See: * https://github.com/rails/rails/pull/14903 * https://github.com/roidrage/lograge/issues/37 Some code by mxrguspxrt from #14903.
-rw-r--r--actionpack/CHANGELOG.md11
-rw-r--r--actionpack/lib/action_controller/metal/instrumentation.rb11
-rw-r--r--actionpack/test/controller/log_subscriber_test.rb20
3 files changed, 38 insertions, 4 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index 556545c0d8..9dfc69b45f 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1 +1,12 @@
+* Ensure `append_info_to_payload` is called even if an exception is raised.
+
+ Fixes an issue where when an exception is raised in the request the additonal
+ payload data is not available.
+
+ See:
+ * https://github.com/rails/rails/pull/14903
+ * https://github.com/roidrage/lograge/issues/37
+
+ *Dieter Komendera*, *Margus Pärt*
+
Please check [4-2-stable](https://github.com/rails/rails/blob/4-2-stable/actionpack/CHANGELOG.md) for previous changes.
diff --git a/actionpack/lib/action_controller/metal/instrumentation.rb b/actionpack/lib/action_controller/metal/instrumentation.rb
index bef7545e71..a3e1a71b0a 100644
--- a/actionpack/lib/action_controller/metal/instrumentation.rb
+++ b/actionpack/lib/action_controller/metal/instrumentation.rb
@@ -28,10 +28,13 @@ module ActionController
ActiveSupport::Notifications.instrument("start_processing.action_controller", raw_payload.dup)
ActiveSupport::Notifications.instrument("process_action.action_controller", raw_payload) do |payload|
- result = super
- payload[:status] = response.status
- append_info_to_payload(payload)
- result
+ begin
+ result = super
+ payload[:status] = response.status
+ result
+ ensure
+ append_info_to_payload(payload)
+ end
end
end
diff --git a/actionpack/test/controller/log_subscriber_test.rb b/actionpack/test/controller/log_subscriber_test.rb
index 49be7caf38..864c6ee130 100644
--- a/actionpack/test/controller/log_subscriber_test.rb
+++ b/actionpack/test/controller/log_subscriber_test.rb
@@ -73,6 +73,16 @@ module Another
def with_action_not_found
raise AbstractController::ActionNotFound
end
+
+ def append_info_to_payload(payload)
+ super
+ payload[:test_key] = "test_value"
+ @last_payload = payload
+ end
+
+ def last_payload
+ @last_payload
+ end
end
end
@@ -163,6 +173,16 @@ class ACLogSubscriberTest < ActionController::TestCase
assert_match(/\(Views: [\d.]+ms\)/, logs[1])
end
+ def test_append_info_to_payload_is_called_even_with_exception
+ begin
+ get :with_exception
+ wait
+ rescue Exception
+ end
+
+ assert_equal "test_value", @controller.last_payload[:test_key]
+ end
+
def test_process_action_with_filter_parameters
@request.env["action_dispatch.parameter_filter"] = [:lifo, :amount]