Recientemente tuvimos un problema en el que, después de una serie de confirmaciones, no se ejecutó un proceso de fondo. Ahora, éramos buenos niños y niñas y corríamos rake test
después de cada check-in 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.¿Cómo encontrar dónde se define un método en tiempo de ejecución?
Seguí el error y se debió a una nueva gema de Rails sobrescribiendo un método en la clase String de una manera que rompió un uso restringido en el código Rails de tiempo de ejecución.
De todos modos, el cuento largo, hay una manera, en tiempo de ejecución, para pedir Rubí, donde se ha definido un método? Algo como whereami(:foo)
que devuelve /path/to/some/file.rb line #45
? En este caso, decirme que se definió en clase String sería inútil, ya que estaba sobrecargado por alguna biblioteca.
no puedo garantizar la vida de código en mi proyecto, por lo grepping para 'def foo'
no necesariamente va a darme lo que necesito, por no hablar de si tengo muchos def foo
's, a veces no sé hasta que el tiempo de ejecución, que uno que pueda estar usando.
en Ruby 1.8.7, un especial El método fue agregado específicamente para encontrar esta información (y todavía está allí en 1.9.3) ... detalles en mi respuesta a continuación. –