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