昨天是美国开发者感恩节假期 - 但现在并不是 Edge Rails 的假期周。
随着 Rails 的 2.3 版本将有重大变化,进展迅速。script/server 的底层结构已经简化并经过了一些重写。曾经在 script/server 中支持的服务器的显式列表已经不存在了。相反,Rails 现在基于对 机架 的安装,且 script/server 开始执行此操作 - 这意味着 Rails 支持机架所支持的任何服务器。
本周,路由发生了两次重大更改。formatted_
路由辅助程序已消失,转而支持将 :format
作为选项传入。对于任何资源,这使路由生成过程减少了 50%,并且可以节省大量的内存(根据 Lighthouse 问题单,在大型应用程序上最多可节省 100MB)。如果您的代码使用 formatted_
辅助程序,它仍将继续工作,但此行为已弃用,如果您使用新标准重写这些路由,您的应用程序将更高效。另一个重大更改是,Rails 现在支持多个路由文件,而不仅仅是 routes.rb。您可以使用 RouteSet#add_configuration_file
在任何时候引入更多路由 - 而无需清除当前加载的路由。 提交 提交
第二个路由更改支持更好的 Rails 引擎:现在引擎中的路由文件将自动加载和重新加载(与其他插件中的文件一样)。除了路由方面,引擎也得到了更多的改进。如果您的插件有应用程序文件夹,那么 app/[models|controllers|helpers] 将自动添加到 Rails 加载路径中。关于它的工作原理以及应该从当前引擎插件中获取多少内容,目前有 积极的讨论,所以我们很可能还没有看到该领域的最后提交。现在引擎还支持添加视图路径。 提交 提交 提交 提交
如果您是 Thoughtbot Quiet Backtrace 插件的爱好者,该插件允许您有选择性地从 Test::Unit 堆栈跟踪中删除行,您会很高兴地在核心部分中找到 ActiveSupport::BacktraceCleaner
和 Rails::BacktraceCleaner
。这支持筛选器(对堆栈跟踪行执行基于正则表达式的替换)和消音器(完全删除堆栈跟踪行)。Rails 会自动添加消音器,以消除新应用程序中最常见的干扰,并构建一个 config/backtrace_silencers.rb
文件来保存您的附加内容。 提交
各种提交继续推动对 Ruby 1.9 和 minitest 的兼容。这应确保在 Rails 2.3 发布时它已准备好处理最新的 Ruby 基础。不过,目前处于不稳定阶段的用户需要当心:不稳定阶段的 Rails 中的一项 更改 依赖于一个尚未应用于 ruby-core 修补程序。您还需要(暂时)采用 Jeremy Kemper 的 Mocha 分支,以实现 此提交 所需的 MiniTest 兼容性。
Jeremy Kemper 和 Josh Peek 一直在努力确保仅在 Rails(及其依赖项)的某些部分实际需要时才将它们载入内存。查看 11 月 23 日的提交以了解大量延迟加载更改。核心框架(Active Support、Active Record、Action Controller、Action Mailer 和 Action View)现在正在使用 autoload
来延迟加载其各个类。这项工作应该有助于减少内存占用并提高 Rails 整体性能。 提交 提交 提交 提交 提交
您可以指定使用新的 preload_frameworks
选项,该选项指示是否应在启动时自动加载核心库。该选项默认为 false
,以便 Rails 分批自动加载自身,但在某些情况下,您仍然需要一次性加载所有内容——Passenger 和 JRuby 都希望看到所有 Rails 被一起加载。 提交
不稳定阶段的 Rails 中的资产主机变得更加灵活,因为它能够将资产主机声明为一个响应调用的特定对象。 DHH 提供了一个示例项目, asset-hosting-with-minimum-ssl ,展示了该功能的一个好用途。 提交
你现在可以通过设置ActionController::Base.helpers_dir
来配置 Rails 应用程序的助手文件夹的位置。这在一些不寻常的情况下会非常有用——用例是构建一个通过插件而不是改变应用程序本身进行扩展的 Rails 应用程序。 提交
CSRF 保护的令牌生成已被简化;现在 Rails 使用由 ActiveSupport::SecureRandom
生成的简单随机字符串,而不是与会话 ID 搅在一起。因此,protect_from_forgery
中的 :digest
和 :secret
选项已弃用,并且不再对 edge 起作用。 提交
当我们谈论秘密时,一些人会发现 ActiveSupport::MessageEncryptor
有新的用途,它提供了一种简单的方法来加密信息,以便将信息存储在不受信任的位置(例如 cookie)。 提交
Active Support 的 from_xml
不再依赖 XmlSimple。相反,Rails 现在包含自己的 XmlMini 实现,仅具有所需的功能。这使 Rails 能够处理掉一直在处理的 XmlSimple 捆绑副本。 提交 提交
正如你可能记得的,上周的改进包括将 application.rb 重命名为 application_controller.rb。这周有一个新的 rake 任务,rake rails:update:application_controller
自动为你完成此操作——它将作为正常 rake rails:update
过程的一部分运行。 提交
如果你正在使用 ActiveSupport::OrderedHash
,那么现在它实现了 each_key
和 each_value
,这是一个好消息。 提交
Rails 核心中的另一部分向 I18n 开放:number_to_human_size
使用的单位。如果你正在维护翻译文件,则需要将 storage_units: [Bytes, KB, MB, GB, TB]
添加到你的翻译中。 提交
对 Rails 组件的支持——Rails 中敏捷 Web 开发称其为“当渴望胜过审慎时发生的事情的极佳示例”——终于消失了。如果这两年的弃用警告对你来说还不够,那么现在是时候找到一个替代解决方案了。 提交
/public 中处理 CGI 和 FCGI 调度的各种文件不再在每个 Rails 应用程序中默认生成(如果你需要,仍然可以通过在运行 rails 命令时添加 --with-dispatches
获得它们,或以后使用 rake rails:generate_dispatchers
添加它们)。 提交 提交
只要一个提醒:这里我并没有对每次的提交提供指引,只是想强调一些事情。本周的边缘变化实际上包括来自各种贡献者的 136 次提交。