1

我安装了一个特定的 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

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

4

1 回答 1

1

该代码的格式非常糟糕......通过像https://www.tutorialspoint.com/online_ruby_formatter.htm这样的格式化程序显示跟踪方法是 on 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)
于 2019-08-16T01:43:25.800 回答