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