Wir hatten kürzlich ein Problem, bei dem nach einer Reihe von Commits ein Backend-Prozess nicht ausgeführt werden konnte. Nun, wir waren gute kleine Jungen und Mädchen und liefen rake test
nach jedem Check-in, aber aufgrund einiger Seltsamkeiten in Rails 'Bibliotheksladen, es kam nur vor, wenn wir es direkt von Mongrel im Produktionsmodus ausgeführt.Wie finde ich heraus, wo eine Methode zur Laufzeit definiert ist?
Ich verfolgt den Fehler nach unten und es war aufgrund eines neuen Rails-Juwel, eine Methode in der String-Klasse in einer Weise zu überschreiben, die eine enge Verwendung im Laufzeit-Rails-Code brach.
Wie auch immer, kurz gesagt, gibt es einen Weg, Ruby zu fragen, wo eine Methode definiert wurde? Etwas wie whereami(:foo)
, das /path/to/some/file.rb line #45
zurückgibt? In diesem Fall wäre es nicht hilfreich, mir zu sagen, dass es in der Klasse String definiert wurde, weil es von einer Bibliothek überladen wurde.
ich die Quelle Leben in meinem Projekt nicht garantieren kann, wird so greppen für 'def foo'
nicht unbedingt mir geben, was ich brauche, nicht zu erwähnen, wenn ich vieledef foo
‚s, manchmal erst zur Laufzeit Ich weiß nicht, was eine, die ich vielleicht benutze.
In Ruby 1.8.7, eine spezielle Methode wurde speziell hinzugefügt, um diese Informationen zu finden (und es ist immer noch in 1.9.3) ... Details in meiner Antwort unten. –