gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:50:00 25 4
gpt4 key购买 nike

这是典型的 config/environments/*.rb 文件的开始方式:

MyApp::Application.configure do
config.cache_classes = false
...
end

传递给configure的 block 取消引用显然未绑定(bind)的符号config。这在技术上是如何运作的? block /Proc/lambda 中使用的符号应绑定(bind)在其声明的上下文中,而不是在调用站点的动态作用域中解析。

一个相关的问题是,Application.configure 方法到底是在哪里声明的?它不在 application.rb 中, engine.rb ,或railtie.rb 。也许如果我设法找到这个方法,我就能找到我的主要问题的答案。

同样相关,我研究过Rails initialization procedure在令人痛苦的细节中,我什至找不到 config/environments/*.rb 文件的提及。如果我知道 init 过程如何处理这些文件,可能会对此有所启发。

最佳答案

它是 lib/rails/application.rb 中的 Railties gem 中 Rails::Application 中的一个方法 config,它返回一个实例Application::Configuration,在lib/rails/application/configuration.rb中定义。

方法configure是从autoloaded模块Configurablelib/贡献给Railtie的Rails/railtie/configurable,并定义为

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

这解释了为什么configure接受的 block 可以解析config符号。请注意,class_eval 是实现此功能的另一个 Rubyist 魔法:它将传入 block 的 self 符号重新绑定(bind)到调用站点的类。

检查“启动过程”部分第一个文件中的注释,其中解释了所有这些优点的来源、方式和顺序,包括如何处理 /config/environments 目录。

关于ruby-on-rails - 环境/*.rb 中的配置符号是如何解析的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com