2025年1月10日,星期五

Schema Dumper 中的排序列、弃用以及大量修复!

由 vipulnsward 发布

大家好,周五快乐!

Vipul 将带来本周 Rails 的最新更新。

在开始之前,有一个小更新——我很高兴地与大家分享,我在 Saeloun 的团队正在作为贡献成员加入 Rails 基金会。在此 阅读我们决定加入的原因,以及你为什么也应该加入!

为非标准环境下的控制台提示着色
目前,Rails 控制台提示的着色规则如下:`dev` 和 `test` 环境为蓝色,`prod` 环境为红色。在非标准环境(如 `staging`)中,提示没有颜色。通过此更改,这些环境的提示将变为品红色。

修复运行单独的 app:update 命令
此更改修复了一个回归,之前单独的 `app:update` 命令(如 `app:update:configs` 或 `app:update:bin`)无法单独运行,因为它们需要加载应用程序,而应用程序已不再加载。

修复在模板渲染期间引发的 ArgumentErrors 的回溯
在此修复之前,带有严格本地变量的模板中的任何参数错误都会被吞没,并被一个具有不相关回溯的异常替换,这使得调试模板变得困难。通过此更改,任何与严格本地变量无关的 `ArgumentError` 都会被重新引发,从而保留原始回溯供开发人员使用。

修复布局中的局部变量访问
布局现在可以访问传递给 `render` 的局部变量。这修复了 Rails 5.1 中引入的一个非常旧的回归!

转储 schema 时按名称对表列进行排序
`schema.rb` 中的表列现在按字母顺序排序。以前它们会按创建顺序排序,这可能导致两个分支并发修改同一表时出现合并冲突。

更新 NotificationAssertions 的 assert_notifcation 以匹配有效负载子集并返回匹配的通知
`ActiveSupport::Testing::NotificationAssertions` 的 `assert_notification` 现在默认匹配有效负载子集。

以前,以下断言会因通知有效负载中的多余键值而失败。现在,通过有效负载子集匹配,它将通过。

assert_notification("post.submitted", title: "Cool Post") do
  ActiveSupport::Notifications.instrument("post.submitted", title: "Cool Post", body: "Cool Body")
end

此外,您现在可以保留匹配的通知以进行更自定义的断言。

notification = assert_notification("post.submitted", title: "Cool Post") do
  ActiveSupport::Notifications.instrument("post.submitted", title: "Cool Post", body: Body.new("Cool Body"))
end
assert_instance_of(Body, notification.payload[:body])

在启动时加载已配置的 Active Storage 插件
以前,使用 `ruby-vips`、`mini_magick` 或 `image_processing` 的 Active Storage 部分只会在使用时尝试加载 gem。这种策略效果很好,因为它允许不需要这些功能的应用程序轻松地忽略它们,而不必依赖它们不需要的 gem。

但是,这种策略的缺点是它需要在请求期间加载代码,并且它会将潜在的错误消息移到请求日志中,而不是在启动时立即显示这些错误。

在 CI 模板中引入 RAILS_MASTER_KEY 占位符
如果使用了自定义凭证或启用了 `config.require_master_key`,则现有的 CI 模板无法按预期工作。此更改在生成的 `ci.yml` 文件中引入了 `RAILS_MASTER_KEY` 占位符,以解决此问题。

在验证服务时不要加载 ActiveStorage::Blob
对于不需要它的任务,例如 `assets:precompile`,我们不应加载整个 ActiveStorage 代码,而应只加载相关部分。

在 collection_check_boxes 中为隐藏字段使用 html_options 中提供的表单
在 `collection_checkboxes` 生成隐藏的 `` 时,请遵守 `html_options[:form]`。

弃用 String#mb_chars 和 AS::Multibyte::Chars
这些 API 是 Ruby 1.8 时代的遗留物,当时 Ruby 字符串不区分编码。

弃用 ActiveSupport::Configurable
此项以前只在 Rails 内部使用过一次,现在已弃用。

您可以在此处 查看所有更改的列表

上周,我们有 30 位贡献者 为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。