2021 年 10 月 31 日,星期日

🎃 万圣节特刊:Zeitwerk 迁移指南、selenium-webdriver 以及一些 Ruby 3.1 的小知识

作者:zzak

🍭 不给糖就捣蛋,我 zzak 在休息一周后带着许多好东西来了!🍬

Rails 自动加载器迁移指南:从经典到 Zeitwerk

这本新指南包含了您在 Rails 6.x 和 7.0 应用中切换自动加载器所需了解的一切!

添加 ActiveRecord::Base.prohibit_shard_swapping

这个新方法可以禁止在给定代码块内切换分片。如果您使用分片来为每个请求提供数据库隔离,这将非常有用。

添加在配置中设置 schema/structure dump 文件路径的支持

此 PR 添加了指定 schema dump 文件路径的能力。对于那些使用水平分片的人来说,以前为每个分片都会创建一个 schema 文件,这使得在分片之间共享相同的迁移变得更加困难。

Rails 7.0 要求 selenium-webdriver >= 4.0.0

之前,由于与 Ruby 3.0 不兼容,Rails 生成的 Gemfile 中的 selenium-webdriver 是 alpha 版本。

将 Concurrent.monotonic_time 替换为 Process.clock_gettime

由于所有现代 Ruby 都支持此接口,因此可以进行一项小优化,以减少 Active Record 连接适配器中的方法调用。

默认在 CI 系统上启用预加载

当在设置了 ENV[“CI”] 的 CI 环境中运行您的 Rails 应用测试套件时,建议开启预加载以帮助识别仅在生产环境中出现的错误。这将是新生成应用的默认设置。

支持命名空间 UUID 的 RFC 4122 字符串

您现在可以在新生成应用中默认有效地使用符合 RFC 4122 标准的字符串,或者通过启用新的 config.active_support.use_rfc4122_namespaced_uuids 设置来实现。

如果可用,使用原生的 Class#descendants

随着 Ruby 3.1 中添加 Class#descendants,我们可以避免迭代 ObjectSpace 中的每个对象来实现相同的功能。此外,请查看 #43548 以了解 DescendantsTracker 的一些额外重构。

在每个测试周围调用 Executor#wrap

Rails.application.executor hook 现在在每个测试周围调用,这有助于防止状态从一个测试泄露到另一个测试。

向 date_select 添加 :day_format 选项

与 :year_format 类似,date_select 的这个新选项允许您传递一个 lambda 来设置显示日期选择选项的格式。

自上次以来,已有 38 人为 Rails 贡献了代码。所有更改可以在 此处查看。下周再见!