Comment faire pour trouver d'où une méthode est définie au moment de l'exécution?

Nous avons eu récemment un problème où, après une série de commits avait eu lieu, un backend processus de l'exécution a échoué. Maintenant, nous avons été bons petits garçons et les filles et a couru rake test après chaque check-in, mais, en raison de certaines bizarreries dans les Rails de chargement de bibliothèque, il ne s'est produite lorsque nous avons lancé directement à partir de Bâtards dans le mode de production.

J'ai suivi le bug et c'était dû à un nouveau gem Rails de remplacer une méthode de la classe String dans une manière qui est cassé un étroit dans l'exécution des Rails de code.

De toute façon, c'est une longue histoire courte, il est un moyen, au moment de l'exécution, de demander Ruby où un méthode a été définie? Quelque chose comme whereami( :foo ) qui renvoie /path/to/some/file.rb line #45? Dans ce cas, de me dire qu'il a été défini dans la classe String serait inutile, parce qu'il est débordé par la bibliothèque.

Je ne peux pas garantir la source de la vie dans mon projet, grepping pour 'def foo' ne va pas forcément me donner ce dont j'ai besoin, pour ne pas mentionner si j'ai de nombreux def foo's, parfois je ne sais pas jusqu'à l'exécution lequel j'ai peut-être l'aide d'.

  • En Ruby 1.8.7, une méthode spéciale a été ajoutée spécialement pour trouver cette information (et il est toujours là dans 1.9.3)... plus de détails dans ma réponse ci-dessous.
InformationsquelleAutor Matt Rogish | 2008-10-06