找到一个流浪的东西放入红宝石代码

时间:2011-01-31 14:15:48

标签: ruby-on-rails ruby

我们有一个相当大的rails应用程序,我已经在unicorn.log中启动了这个输出:

#:0xc644248>#:0xc644248>#:0xc4f06e4>#:0xc4f06e4>#:0xca481b4>#:0xca481b4>#:0xc53f604>#:0xc53f604>#:0xcd7a60c>#:0xcd7a60c>#:0xc5df2f8>#:0xc5df2f8>#:0xc69fd00>#:0xc69fd00>#:0xc560ae8>#:0xc560ae8>

在我看来,可能在某处有一个杂散的Kernel.puts方法调用,但我一直在搜索几个小时但找不到它。

任何人都有跟踪此类内容的提示吗?

4 个答案:

答案 0 :(得分:8)

你可以修补补丁,并在调用时引发异常。您甚至可以使用输出字符串上的正则表达式匹配来调整它(看起来像递归对象转储)。

module Kernel
  def puts (s)
    raise "puts called, check the backtrace for the source" if s =~ /#:[a-z0-9]>*/
  end
end

也可能是它不是对看跌期权的调用,而是#inspect。

答案 1 :(得分:2)

您检查过display吗?这是打印东西的另一种方法。

答案 2 :(得分:1)

您可以浏览所有文件并搜索对Kernel.puts的任何调用,如下所示:

find -iname "*.rb" | xargs grep -iR 'Kernel.puts'

然而,就整洁(和有效性)而言,我可能会选择Jeff Paquette提供的解决方案。

答案 3 :(得分:0)

这是我使用的,它类似于Banang的答案,但可能更简单。从目录中执行grep,如下所示:

grep -rn'puts'。

当然它会搜索所有内容,但您可以在要限制的任何目录中运行它。这应该为您提供所需的文件和行号。您可以根据需要微调搜索条件。