Как найти, где метод определяется во время выполнения?

Недавно у нас возникла проблема, когда после серии коммитов серверный процесс не запускался. Теперь мы были хорошими маленькими мальчиками и девочками и бежалиrake test после каждой регистрации, но из-за некоторых странностей в загрузке библиотеки Rails это происходило только тогда, когда мы запускали его непосредственно из Mongrel в производственном режиме.

Я отследил ошибку, и это произошло из-за того, что новый драгоценный камень Rails переписал метод в классе String способом, который нарушил одно узкое использование в коде Rails времени выполнения.

В любом случае, если коротко, есть ли способ, во время выполнения, спросить Ruby, где был определен метод? Что-то вродеwhereami( :foo ) это возвращает/path/to/some/file.rb line #45? В этом случае, сказать, что он был определен в классе String, было бы бесполезно, потому что он был перегружен какой-то библиотекой.

Я не могу гарантировать источник жизни в моем проекте, так что'def foo' не обязательно даст мне то, что мне нужно, не говоря уже о том, если у меня естьмного def fooИногда я не знаю до времени выполнения, какой из них я могу использовать.

Ответы на вопрос(10)

Ваш ответ на вопрос