これは典型的なconfig/environments/*.rb
ファイルが始まる方法です:設定記号が環境に解決される方法/ * Rbが
MyApp::Application.configure do
config.cache_classes = false
...
end
configure
に渡されたブロックは明らかに結合していないシンボルconfig
を逆参照します。これは技術的にどのように機能しますか?ブロック/ Proc/lambdaで使用されているシンボルは、その宣言のコンテキストでバインドされ、コールサイトのダイナミックスコープで解決されることはありません。
関連する質問は、正確にはApplication.configure
メソッドが宣言されていますか? application.rb
、engine.rb
、またはrailtie.rb
には含まれていません。たぶん私がこの方法を見つけることができたなら、私は主な質問に対する答えを見つけたでしょう。
また、私はRails initialization procedureを徹底的に研究しており、config/environments/*.rb
ファイルについても言及していません。これらのファイルがinitプロシージャによってどのように扱われているかを知っていれば、これはいくつかのことを明らかにするかもしれません。
[こちら](https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/application.rb)のファイルを確認しましたが、 'configure'を検索すると何も表示されません。私は間違ったバージョンを見ていますか? –
明らかに、私は 'config'を見つけることができますが、' configure'に渡されたブロックがその宣言コンテキストからそのメソッドをどのように見ることができるかは説明していません。私は 'ENV.rb'から呼び出されている' configure'メソッドを探しています。 –
'lib/rails/railtie/configurable#configure'はこのメソッドが' def configure(&block);で定義されている主要な場所です。 class_eval(&block);あなたが探しているブロックですよね? –