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

2024-01-24

这就是一个典型的config/environments/*.rb文件开始:

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

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

一个相关的问题是,到底在哪里Application.configure方法声明?它也不在application.rb https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/application.rb, engine.rb https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/engine.rb, or railtie.rb https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/railtie.rb。也许如果我设法找到这种方法,我就能找到我的主要问题的答案。

也相关,我研究过Rails 初始化过程 http://guides.rubyonrails.org/initialization.html在令人难以忍受的细节中,我什至找不到任何提及config/environments/*.rb文件。如果我知道 init 过程如何处理这些文件,可能会对此有所启发。


这是一个方法config in Rails::Application在 Railties 宝石中lib/rails/application.rb它返回一个实例Application::Configuration,定义于lib/rails/application/configuration.rb.

方法configure被贡献于Railtie来自autoload教育模块Configurable, lib/rails/railtie/configurable,并定义为

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

这解释了为什么阻止configure接受可以解决config象征。注意class_eval是使这项工作有效的另一个红宝石魔法:它重新绑定传入的块self调用站点类的符号。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

环境/*.rb 中的配置符号是如何解析的 的相关文章

  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 使用rSpec 测试delayed_job 链的最佳方法是什么?

    目前 当我的代码中有一个延迟方法时 如下所示 CommentMailer delay deliver comments comment true 我在规范中写了这样的内容 dj mock DelayProxy CommentMailer s
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • Rails 中的嵌套布局

    Rails 3 2 中可以嵌套布局吗 我想创建 application html erb 使用的通用布局 并允许应用程序中的几个视图使用它 我找到了嵌套布局 https github com eric nested layoutsruby
  • 高效地重新安排 ActiveJob (resque/sidekiq)

    我正在玩Rails 4 2应用程序使用ActiveJob受支持resque sidekiq用于电子邮件安排 当用户创建时事通讯活动时 会创建一个新作业并安排在特定日期 这一切都很好 但是当用户更改交货日期时会发生什么 在这种情况下 每个作业
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • Rails 选择帮助程序中的 :include_blank 和 :prompt 有什么区别?

    在 Rails 文档中 http api rubyonrails org classes ActionView Helpers FormOptionsHelper html label Options 前两个列出的选项select帮手是 i
  • Rails 3.2:用 json 序列化中的空字符串替换 null 值

    我正在使用 Rails 3 2序列化 http www simonecarletti com blog 2010 04 inside ruby on rails serializing ruby objects with json 将 ru
  • Rails 3.1、Ruby 1.9.2-p180 和 UTF-8 问题

    我在使用 UTF 8 字符时遇到一些问题 这是 db seeds rb User create username eml first name last name ck email email protected cdn cgi l ema
  • 在开发模式下,在每次请求时重新加载文件后,如何挂钩 Rails?

    我正在研究一个gem https github com bradrobertson apartment设置 ActiveRecord 模型的属性 例如table name 基于用户配置选项动态 我有一个初始化程序可以实现这一点 然而我的问题
  • 如何在 mongoid 中使用 or 条件进行查询

    如何在 Mongoid 中使用 or 条件进行查询 这是 OR 在 mongoid 中查询 如果你想要像下面这样的查询 select from user where id 10 or name hitesh 在带有 mongoid 的 Ra
  • 如果即使对于开源项目,rails 项目的任何源代码也应该被隐藏怎么办? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是一个很难寻找的东西 如果我有一个开源 Rails Web 应用程序项目 其源代码是公开托管的 例如在 GitHub 上 如果该应用
  • 回形针/乘客 NotIdentifiedByImageMagickError:

    当我尝试上传照片时红宝石 on Rails http en wikipedia org wiki Ruby on Rails using 回形针 http github com thoughtbot paperclip在我的本地机器上它运行
  • Rails 6:每个用户只能创建一个配置文件

    我目前正在开发 Rails 6 应用程序 我有以下关联 用户有一个配置文件 并且配置文件属于用户 当编辑用户的配置文件时 我最终为该用户提供了两个配置文件 我希望每个用户只有一份个人资料 编辑表单 profile edit html erb

随机推荐