2021 年 10 月 31 日星期日

🎃 万圣节版:Zeitwerk 迁移指南、selenium-webdriver 和 Ruby 3.1 的一些小惊喜

zzak 发布

🍭 要糖不要恶作剧,zzak 在休整了一周以后带着许多好东西来了!🍬

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

本指南包含了您需要了解的关于 Rails 6.x 和 7.0 应用程序的自动加载器的所有内容!

添加 ActiveRecord::Base.prohibit_shard_swapping

这个新方法禁止在指定代码块中切换分片。如果您在按请求提供数据库隔离的情况下使用分片,这个方法会非常有用。

添加在配置中设置架构/结构转储文件路径的支持

此 PR 新增针对架构转储文件的路径指定功能。对于那些使用水平分片的人来说,过去会为每个分片创建一个架构文件,这使得跨分片共享相同的迁移变得更加困难。

Rails 7.0 要求 selenium-webdriver >= 4.0.0

因为与 Ruby 3.0 不兼容,此前 Rails 使用 alpha 版 selenium-webdriver 生成了 Gemfile

用 Process.clock_gettime 替换 Concurrent.monotonic_time

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

在 CI 系统中默认启用 Eager 加载

如果您在设置了 ENV[“CI”] 的 CI 环境中运行 Rails 应用程序测试套件,建议启用 Eager 加载,以帮助识别可能仅发生在生产环境中的错误。对于新生成的应用程序,这将是默认设置。

支持 RFC 4122 字符串表示名称空间 UUID

现在,您可以有效地在新生成的应用程序中默认使用兼容 RFC 4122 的字符串,也可以通过启用新的 config.active_support.use_rfc4122_namespaced_uuids 设置来使用它。

如有可能使用本机 Class#descendants

随着 Ruby 3.1 中添加 Class#descendants,我们可以避免遍历 ObjectSpace 中的每个对象来实现此功能。此外,查看 #43548,了解 DescendantsTracker 的一些其他重构信息。

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

Rails.application.executor 钩子现在围绕每个测试被调用,这有助于防止状态从一个测试泄漏到另一个测试中。

添加 :day_format 选项到 date_select

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

38 人自上次以来的提交。所有更改均在此提供。直到下周!