【发布时间】:2010-09-15 14:17:28
【问题描述】:
我们最近遇到了一个问题,在发生一系列提交后,后端进程无法运行。现在,我们都是好孩子,每次签入后都会运行 rake test,但由于 Rails 库加载的一些奇怪之处,只有当我们在生产模式下直接从 Mongrel 运行它时才会发生这种情况。
我追踪了这个错误,这是由于一个新的 Rails gem 覆盖了 String 类中的一个方法,这种方式打破了运行时 Rails 代码中的一个狭窄用途。
总之,长话短说,有没有办法在运行时询问 Ruby 方法是在哪里定义的?像whereami( :foo ) 这样返回/path/to/some/file.rb line #45 的东西?在这种情况下,告诉我它是在 String 类中定义的将是没有帮助的,因为它被某个库重载了。
我不能保证源代码存在于我的项目中,所以寻找 'def foo' 不一定能满足我的需求,更不用说我是否有很多 def foo 的,有时直到运行时我才知道我可能会使用哪一个。
【问题讨论】:
-
在 Ruby 1.8.7 中,专门添加了一种特殊方法来查找此信息(并且在 1.9.3 中仍然存在)...在下面我的答案中详细说明。
标签: ruby-on-rails ruby runtime methods definition