Dies ist, wie eine typische config/environments/*.rb
Datei beginnt:Wie wird das Konfigurationssymbol in Umgebungen aufgelöst/* rb
MyApp::Application.configure do
config.cache_classes = false
...
end
Der Block übergeben configure
dereferenziert das Symbol config
die scheinbar ungebunden ist. Wie funktioniert das technisch? Die in einem Block/Proc/Lambda verwendeten Symbole sollten im Kontext ihrer Deklaration gebunden sein und dürfen nicht im dynamischen Bereich der Aufruf-Site aufgelöst werden.
Eine verwandte Frage ist, wo genau wird die Application.configure
Methode deklariert? Es ist nicht in application.rb
, engine.rb
oder railtie.rb
. Vielleicht, wenn ich diese Methode gefunden hätte, hätte ich die Antwort auf meine Hauptfrage gefunden.
Auch verwandt, habe ich die Rails initialization procedure in quälenden Detail studiert, und ich kann nicht einmal eine Erwähnung einer config/environments/*.rb
Datei finden. Wenn ich wüsste, wie diese Dateien durch das init-Verfahren behandelt wurden, könnte das ein wenig Licht ins Dunkel bringen.
Ich habe diese Datei [hier] überprüft (https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/application.rb), aber die Suche nach 'configure' zeigt nichts. Betrachte ich eine falsche Version? –
Um klar zu sein, kann ich 'config' finden, aber das erklärt nicht, wie der Block, der an' configure' übergeben wurde, diese Methode aus seinem Deklarationskontext sehen kann. Ich suche nach der 'configure' Methode, die von 'ENV.rb' aufgerufen wird. –
'lib/rails/railtie/konfigurierbar # configure' ist der Hauptort, an dem diese Methode als' def configure (& block); class_eval (& Block); Ende. - Das ist der Block, nach dem du suchst, oder? –