我们最近遇到了一个问题,在发生一系列提交后,后端进程无法运行。现在,我们都是好孩子,rake test
每次签到后都会跑,但是由于 Rails 库加载的一些奇怪之处,只有当我们在生产模式下直接从 Mongrel 运行它时才会发生这种情况。
我跟踪了这个错误,这是由于一个新的 Rails gem 覆盖了 String 类中的一个方法,这种方式打破了运行时 Rails 代码中的一个狭窄用途。
无论如何,长话短说,有没有办法在运行时询问 Ruby 在哪里定义了一个方法?类似的东西whereami( :foo )
回来了/path/to/some/file.rb line #45
?在这种情况下,告诉我它是在 String 类中定义的将是没有帮助的,因为它被某个库重载了。
我不能保证源代码存在于我的项目中,因此 grepping for'def foo'
不一定能给我我需要的东西,更不用说我是否有很多 def foo
's,有时我直到运行时才知道我可能正在使用哪一个。