Wir hatten kürzlich ein Problem, bei dem nach einer Reihe von Commits ein Backend-Prozess nicht ausgeführt werden konnte. Jetzt waren wir gute kleine Jungen und Mädchen und rannten rake test
nach jedem Check-in, aber aufgrund einiger Kuriositäten beim Laden der Rails-Bibliothek trat dies nur auf, wenn wir es direkt von Mongrel im Produktionsmodus aus liefen.
Ich habe den Fehler aufgespürt und es lag daran, dass ein neues Rails-Juwel eine Methode in der String-Klasse so überschrieb, dass eine enge Verwendung im Rails-Laufzeitcode gebrochen wurde.
Wie auch immer, kurz gesagt, gibt es zur Laufzeit eine Möglichkeit, Ruby zu fragen, wo eine Methode definiert wurde? So etwas whereami( :foo )
kehrt zurück /path/to/some/file.rb line #45
? In diesem Fall wäre es nicht hilfreich, mir mitzuteilen, dass es in der Klasse String definiert wurde, da es von einer Bibliothek überladen wurde.
Ich kann nicht garantieren, dass die Quelle in meinem Projekt lebt, daher 'def foo'
gibt mir das Greifen nach nicht unbedingt das, was ich brauche, ganz zu schweigen davon, ob ich viele habe def foo
. Manchmal weiß ich erst zur Laufzeit, welche ich möglicherweise verwende.