ruby-on-rails – 如何在环境/ * .rb中解析配置符号

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在环境/ * .rb中解析配置符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是典型的config / environments / * .rb文件的开头方式:
MyApp::Application.configure do
  config.cache_classes = false
  ...
end

传递给配置的块解除引用显然未绑定的符号配置.这在技术上如何工作?块/ Proc / lambda中使用的符号应该在其声明的上下文中绑定,而不是在调用站点的动态范围中解析.

一个相关的问题是,Application.configure方法究竟在哪里声明?它不在application.rb,engine.rbrailtie.rb中.也许如果我设法找到这种方法,我会找到我的主要问题的答案.

同样相关,我已经研究了Rails initialization procedure令人难以忍受的细节,我甚至找不到配置/环境/ * .rb文件.如果我知道init程序如何处理这些文件,那可能会对此有所了解.

解决方法

它是在lib / rails / application.rb中的railties gem中的Rails :: Application中的方法配置,它返回在lib / rails / application / configuration.rb中定义的Application :: Configuration实例.

配置方法自动加载模块Configurable,lib / rails / railtie / configurable贡献给Railtie,并定义为

def configure(&block)
  class_eval(&block)
end

这解释了为什么配置接受的块可以解析配置符号.请注意,class_eval是另一个使用它的rubyist魔法:它将传入块的自我符号重新绑定到调用站点的类.

检查“引导过程”部分中第一个文件中的注释,该部分说明了所有这些优点的来源,方式和顺序,包括如何处理/ config / environments目录.

猜你在找的Ruby相关文章