¿Cómo encontrar dónde se define un método en tiempo de ejecución?

Recientemente tuvimos un problema en el que, después de una serie de confirmaciones, no se pudo ejecutar un proceso de back-end. Ahora, éramos buenos chicos y chicas y corrimosrake test después de cada registro pero, debido a algunas rarezas en la carga de la biblioteca de Rails, solo ocurrió cuando lo ejecutamos directamente desde Mongrel en modo de producción.

Rastreé el error y se debió a que una nueva gema de Rails sobrescribía un método en la clase String de una manera que rompió un uso limitado en el código de Rails en tiempo de ejecución.

De todos modos, cuento, ¿hay alguna manera, en tiempo de ejecución, de preguntar a Ruby dónde se ha definido un método? Algo comowhereami( :foo ) que vuelve/path/to/some/file.rb line #45? En este caso, decirme que se definió en la clase Cadena no sería útil, ya que estaba sobrecargado por alguna biblioteca.

No puedo garantizar que la fuente viva en mi proyecto, por lo que grepping para'def foo' No necesariamente me dará lo que necesito, por no mencionar si tengomuchos def foo's, a veces no sé hasta el tiempo de ejecución cuál puedo estar usando.

Respuestas a la pregunta(10)

Su respuesta a la pregunta