Di recente abbiamo riscontrato un problema a causa del quale non è stato possibile eseguire un processo di back-end dopo una serie di commit. Eravamo bravi ragazzini e correvamo rake test
dopo ogni check-in ma, a causa di alcune stranezze nel caricamento della libreria di Rails, si verificava solo quando lo gestivamo direttamente da Mongrel in modalità produzione.
Ho rintracciato il bug ed era dovuto a una nuova gemma di Rails che sovrascriveva un metodo nella classe String in un modo che ha interrotto un uso ristretto nel codice di runtime di Rails.
Comunque, per farla breve, c'è un modo, in fase di esecuzione, di chiedere a Ruby dove è stato definito un metodo? Qualcosa del genere whereami( :foo )
ritorna /path/to/some/file.rb line #45
? In questo caso, dirmi che è stato definito nella classe String non sarebbe utile, perché era sovraccarico di alcune librerie.
Non posso garantire la vita delle fonti nel mio progetto, quindi 'def foo'
non posso necessariamente fornirmi ciò di cui ho bisogno, per non parlare del fatto che ne ho molti def foo
, a volte non so fino al momento dell'esecuzione quale potrei usare.