最近、一連のコミットが発生した後、バックエンド プロセスの実行に失敗するという問題がありました。さて、私たちは良い子で、rake test
チェックインのたびに実行しましたが、Rails のライブラリの読み込みに奇妙な点があったため、本番モードで Mongrel から直接実行したときにのみ発生しました。
バグを突き止めたところ、新しい Rails gem が String クラスのメソッドを上書きし、Rails コードのランタイム コードの 1 つの狭い使用法を破ったことが原因でした。
とにかく、簡単に言えば、実行時に Ruby にメソッドが定義されている場所を尋ねる方法はありますか? そのようなものwhereami( :foo )
が返されます/path/to/some/file.rb line #45
か?この場合、クラス String で定義されていると言っても役に立ちません。ライブラリによってオーバーロードされているからです。
ソースがプロジェクトに存在することを保証できないため、 grep を実行して'def foo'
も必ずしも必要なものが得られるとは限り def foo
ません。