【问题标题】:Override gem module in initializers在初始化程序中覆盖 gem 模块
【发布时间】:2019-08-16 00:33:25
【问题描述】:

我安装了specific gem gem,我希望覆盖 gem 模块中的以下方法:

def trace
    exception.backtrace.join("\n")
end

我需要将exception.backtrace.join("\n") 更改为exception.backtrace.join("<br>")

我不想为此创建一个新的分叉,所以我尝试在我的初始化程序中添加它:

module ExceptionHandler
    def trace
        exception.backtrace.join("<br>")
    end
end

这不起作用(显然)。有人可以看看我上面链接的模块,让我知道我缺少什么吗?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rubygems exceptionhandler


    【解决方案1】:

    该代码的格式非常糟糕...通过像https://www.tutorialspoint.com/online_ruby_formatter.htm 这样的格式化程序显示跟踪方法在ExceptionHandler::Exception,而不是ExceptionHandler,所以试试

    class ExceptionHandler::Exception
      def trace
        exception.backtrace.join("<br>")
      end
    end
    

    编辑:由于ExceptionHandler::Exception 是动态定义的,因此您需要预先添加补丁而不是重新打开类。您给出的错误消息暗示类的构造函数可能发生了一些变化。 (可能是重新开课......?我无法解释......)可能没有什么不同,但试试:

    module ExceptionHandlerPatch
      def trace
        exception.backtrace.join("<br>")
      end
    end
    
    ExceptionHandler::Exception.prepend(ExceptionHandlerPatch)
    

    【讨论】:

    • 对我不起作用。返回“故障安全响应期间出错:参数数量错误(给定 1,预期为 0)”。在 app/controllers/exception_handler/exceptions_controller.rb:20:in 'initialize' 和其他一些地方失败
    • 完整回溯?
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 2018-10-25
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多