From 8d8e34cfe33d3af2e3ab3270250e6822ef378bc7 Mon Sep 17 00:00:00 2001 From: Yves Siegrist Date: Fri, 12 Feb 2016 15:13:21 +0100 Subject: [PATCH] Rails 5 deprecation warning fix (Module#prepend) --- lib/raven/integrations/rails.rb | 14 ++++++++++---- .../rails/middleware/debug_exceptions_catcher.rb | 9 +++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/raven/integrations/rails.rb b/lib/raven/integrations/rails.rb index 2cfaf24e8..362bfe024 100644 --- a/lib/raven/integrations/rails.rb +++ b/lib/raven/integrations/rails.rb @@ -21,12 +21,18 @@ class Rails < ::Rails::Railtie end if Raven.configuration.catch_debugged_exceptions + require 'raven/integrations/rails/middleware/debug_exceptions_catcher' if defined?(::ActionDispatch::DebugExceptions) - require 'raven/integrations/rails/middleware/debug_exceptions_catcher' - ::ActionDispatch::DebugExceptions.send(:include, Raven::Rails::Middleware::DebugExceptionsCatcher) + exceptions_class = ::ActionDispatch::DebugExceptions elsif defined?(::ActionDispatch::ShowExceptions) - require 'raven/integrations/rails/middleware/debug_exceptions_catcher' - ::ActionDispatch::ShowExceptions.send(:include, Raven::Rails::Middleware::DebugExceptionsCatcher) + exceptions_class = ::ActionDispatch::ShowExceptions + end + unless exceptions_class.nil? + if RUBY_VERSION.to_f < 2.0 + exceptions_class.send(:include, Raven::Rails::Middleware::OldDebugExceptionsCatcher) + else + exceptions_class.send(:prepend, Raven::Rails::Middleware::DebugExceptionsCatcher) + end end end end diff --git a/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb b/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb index f0ab32a68..bd35ff0b5 100644 --- a/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb +++ b/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb @@ -2,6 +2,15 @@ module Raven class Rails module Middleware module DebugExceptionsCatcher + def render_exception(env_or_request, exception) + env = env_or_request.respond_to?(:env) ? env_or_request.env : env_or_request + Raven::Rack.capture_exception(exception, env) + ensure + super + end + end + + module OldDebugExceptionsCatcher def self.included(base) base.send(:alias_method_chain, :render_exception, :raven) end