寻找可能导致麻烦的 Ruby 猴子补丁的来源?
Posted
技术标签:
【中文标题】寻找可能导致麻烦的 Ruby 猴子补丁的来源?【英文标题】:Finding source of possible Ruby monkey patch causing troubles? 【发布时间】:2021-07-23 23:54:24 【问题描述】:我正在处理一个我还无法调试的错误。我在 Rails 6.0 中有一个 100% 绿色测试的应用程序。我尝试将应用程序更新到 Rails 6.1,现在我看到以下行为:
include ActionView::Helpers::NumberHelper
number_to_currency 7
TypeError (no implicit conversion of String into Integer)
红宝石 2.7.3 导轨 6.1
有很多宝石,我想知道这是否与某人修补某些东西有关,但我不知道是否有办法追踪修补的资金来源?或者,如果您有任何想法,我将不胜感激。
这是回溯:
number_to_currency 7
NoMethodError: undefined method `nan?' for nil:NilClass
5 module ActiveSupport
6 module NumberHelper
7 class NumberToRoundedConverter < NumberConverter # :nodoc:
11 def convert
24 if precision = options[:precision]
31 formatted_string =
❯ 32 if rounded_number.nan? || rounded_number.infinite? || rounded_number == rounded_number.to_i
34 else
40 end
41 else
47 end
62 end
63 end
64 end
【问题讨论】:
你能显示一些痕迹吗? 【参考方案1】:通过使用pry-rails
gem,您很可能通过将binding.pry
放在发生错误的上方,然后重新运行代码来找到源代码。当 Pry REPL 出现时,您可以运行命令 show-source number_to_currency
。这将显示文件位置,例如:
[2] pry(main)> show-source number_to_currency
From: /Users/.../actionview-6.0.2.2/lib/action_view/helpers/number_helper.rb:70:
Owner: ActionView::Helpers::NumberHelper
Visibility: public
Signature: number_to_currency(number, options=?)
Number of lines: 3
def number_to_currency(number, options = )
delegate_number_helper_method(:number_to_currency, number, options)
end
如果您随后需要向上定义链,您也可以多次使用--super
标志向上直到找到问题。例如,要上升 2 个超级,您可以使用 show-source --super --super number_to_currency
您可以通过show-source --help
查看更多选项
【讨论】:
以上是关于寻找可能导致麻烦的 Ruby 猴子补丁的来源?的主要内容,如果未能解决你的问题,请参考以下文章