我們最近出現了一個問題,在發生一系列提交後,後端進程無法運行。現在,我們是優秀的小男孩和女孩,每次辦理登機手續後都會跑rake test
,但由於Rails圖書館加載中存在一些問題,只能在生產模式下直接從Mongrel運行它時纔會發生。如何查找在運行時定義方法的位置?
我跟蹤了這個bug,這是由於新的Rails gem覆蓋了String類中的一個方法,這種方式打破了運行時Rails代碼中的一個狹窄用法。
無論如何,長話短說,在運行時,有沒有辦法在Ruby中定義一個方法?像whereami(:foo)
那樣返回/path/to/some/file.rb line #45
?在這種情況下,告訴我它是在String類中定義的,將無濟於事,因爲它被某個庫重載。
我不能保證源生活在我的項目,所以對於grepping將'def foo'
不一定給我我需要什麼,更何況,如果我有很多def foo
的,有時我不知道,直到運行時其我可能會使用一個。
在Ruby 1.8.7,特殊方法被特別添加來找到這些信息(並且它仍然存在於1.9.3中)...下面我的答案中有詳細信息。 – 2012-02-20 04:11:43