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目录.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...