13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'actionpack/lib/action_dispatch/middleware/executor.rb', line 13
def call(env)
state = @executor.run!(reset: true)
if response_finished = env["rack.response_finished"]
response_finished << proc { state.complete! }
end
begin
response = @app.call(env)
if env["action_dispatch.report_exception"]
error = env["action_dispatch.exception"]
@executor.error_reporter.report(error, handled: false, source: "application.action_dispatch")
end
unless response_finished
response << ::Rack::BodyProxy.new(response.pop) { state.complete! }
end
returned = true
response
rescue Exception => error
request = ActionDispatch::Request.new env
backtrace_cleaner = request.("action_dispatch.backtrace_cleaner")
wrapper = ExceptionWrapper.new(backtrace_cleaner, error)
@executor.error_reporter.report(wrapper.unwrapped_exception, handled: false, source: "application.action_dispatch")
raise
ensure
if !returned && !response_finished
state.complete!
end
end
end
|