Как найти, где метод определяется во время выполнения?
Недавно у нас возникла проблема, когда после серии коммитов серверный процесс не запускался. Теперь мы были хорошими маленькими мальчиками и девочками и бежалиrake test
после каждой регистрации, но из-за некоторых странностей в загрузке библиотеки Rails это происходило только тогда, когда мы запускали его непосредственно из Mongrel в производственном режиме.
Я отследил ошибку, и это произошло из-за того, что новый драгоценный камень Rails переписал метод в классе String способом, который нарушил одно узкое использование в коде Rails времени выполнения.
В любом случае, если коротко, есть ли способ, во время выполнения, спросить Ruby, где был определен метод? Что-то вродеwhereami( :foo )
это возвращает/path/to/some/file.rb line #45
? В этом случае, сказать, что он был определен в классе String, было бы бесполезно, потому что он был перегружен какой-то библиотекой.
Я не могу гарантировать источник жизни в моем проекте, так что'def foo'
не обязательно даст мне то, что мне нужно, не говоря уже о том, если у меня естьмного def foo
Иногда я не знаю до времени выполнения, какой из них я могу использовать.