Nous avons récemment rencontré un problème où, après une série de validations, un processus d'arrière-plan n'a pas pu s'exécuter. Maintenant, nous étions de bons petits garçons et filles et avons couru rake test
après chaque enregistrement, mais, en raison de certaines bizarreries dans le chargement de la bibliothèque de Rails, cela ne s'est produit que lorsque nous l'avons exécuté directement depuis Mongrel en mode production.
J'ai suivi le bogue et cela était dû à un nouveau joyau Rails écrasant une méthode dans la classe String d'une manière qui a rompu une utilisation étroite dans le code Rails d'exécution.
Quoi qu'il en soit, pour faire court, y a-t-il un moyen, au moment de l'exécution, de demander à Ruby où une méthode a été définie? Quelque chose comme whereami( :foo )
ça revient /path/to/some/file.rb line #45
? Dans ce cas, il ne serait pas utile de me dire qu'il a été défini dans la classe String, car il était surchargé par une bibliothèque.
Je ne peux pas garantir la vie de la source dans mon projet, donc chercher 'def foo'
ne me donnera pas nécessairement ce dont j'ai besoin, sans mentionner si j'en ai plusieurs def foo
, parfois je ne sais pas avant l'exécution laquelle j'utilise.