diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 57e9de2953d..52a94b4d3c4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -153,7 +153,7 @@ class ApplicationController < ActionController::Base end end - rescue_from Discourse::NotFound, PluginDisabled do + rescue_from Discourse::NotFound, PluginDisabled, ActionController::RoutingError do rescue_discourse_actions(:not_found, 404) end diff --git a/lib/middleware/discourse_public_exceptions.rb b/lib/middleware/discourse_public_exceptions.rb index c3364281332..4770b427934 100644 --- a/lib/middleware/discourse_public_exceptions.rb +++ b/lib/middleware/discourse_public_exceptions.rb @@ -17,12 +17,22 @@ module Middleware response = ActionDispatch::Response.new if exception - fake_controller = ApplicationController.new - fake_controller.response = response + begin + fake_controller = ApplicationController.new + fake_controller.response = response + fake_controller.request = ActionDispatch::Request.new(env) - if ApplicationController.rescue_with_handler(exception, object: fake_controller) - return [response.status, response.headers, response.body] + if ApplicationController.rescue_with_handler(exception, object: fake_controller) + body = response.body + if String === body + body = [body] + end + return [response.status, response.headers, body] + end + rescue => e + Discourse.warn_exception(e, message: "Failed to handle exception in exception app middleware") end + end super end