微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/ruby/270017.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐