W ten sposób zaczyna się typowym config/environments/*.rb
file:Jak jest symbol config rozwiązany w środowiskach/* rb
MyApp::Application.configure do
config.cache_classes = false
...
end
Przekazany do configure
blok dereferences symbol config
który jest pozornie niezwiązany. Jak to działa technicznie? Symbole użyte w bloku/Proc/lambda powinny być powiązane w kontekście deklaracji, a nie pozostawione do rozstrzygnięcia w zakresie dynamicznym na stronie wywołania.
Powiązanym pytaniem jest, gdzie dokładnie została zadeklarowana metoda Application.configure
? Nie jest to ani application.rb
, engine.rb
, ani railtie.rb
. Może gdybym zdołał znaleźć tę metodę, znalazłbym odpowiedź na moje główne pytanie.
Podobne, badałem Rails initialization procedure w nieznośnych szczegółach i nie mogę znaleźć nawet wzmianki o pliku config/environments/*.rb
. Gdybym wiedział, jak te pliki zostały potraktowane przez procedurę init, może to rzucić trochę światła na to.
Sprawdziłem ten plik [tutaj] (https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/application.rb), ale wyszukiwanie 'configure' nie ujawnia niczego. Czy patrzę na złą wersję? –
Aby było jasne, mogę znaleźć 'config', ale to nie wyjaśnia, w jaki sposób blok przekazany do' configure' może zobaczyć tę metodę z kontekstu deklaracji. Szukam metody 'configure', która jest wywoływana z' ENV.rb'. –
'lib/rails/railtie/configurable # configure' to główne miejsce, w którym ta metoda jest zdefiniowana jako' def configure (& block); class_eval (& block); koniec. "- więc to blok, którego szukasz, prawda? –