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