2022年2月11日,星期五

Rails 7.0.2、基于 Rails 版本模式的版本控制以及更多

由 p8 发布

大家好,我是 Petrik,为您带来 Rails 世界的最新消息。

Rails 7.0.2 已发布
虽然这看起来像是一个常规的补丁发布,但有一些值得注意的变化。
首先,7.0.0 中引入的一个功能被移除了:能够将 service_name 参数传递给 DirectUploadsController。当从 Rails 6.1 升级时,此功能会导致严重问题,因此 Rails 团队决定在他们进行向后兼容的更改时将其移除。他们并非轻率地做出此决定,通常也不会在功能发布后不经过适当的弃用周期就移除功能,但此时他们决定优先考虑让用户更容易升级。

最后,本着同样的目标,Rails 7.0.2 引入了一个新功能,根据 Rails 版本对数据库 schema 进行版本控制。这个新功能将允许现有应用程序仍然加载它们在 Rails 6.1 中生成的数据库 schema,保持与之前相同的行为,并与生产数据库 schema 匹配。

Fiber 安全的 ConnectionPool
ActiveSupport::IsolatedExecutionState.isolation_level 设置为 :fiber 时,连接池现在支持来自同一线程的多个 Fiber 从连接池中检出连接。

将 #to_fs 设置为 #to_s(:format) 的默认替代
#to_s(:format) 最近被弃用,转而使用 #to_formatted_s,因为 Ruby 3.1 对插值进行了优化。#to_formatted_s 对于一个经常使用的方法来说名字有点太长了。此更改将 #to_fs 设置为 Rails 内部和文档中的默认值。#to_formatted_s 仍然是 #to_fs 的别名。

将 ActiveSupport::MessageEncryptor 序列化器默认设置为 JSON
使用 JSON 比当前的 Marshal 序列化器提供了更安全的选择。
现有应用程序可以通过升级指南中描述的路径迁移到 JSON

根据新的默认值,转储 datetime 列的精度
自 Rails 7.0 起,datetime 列的精度默认值为 6。这意味着不设置 :precision 选项的 t.datetime 调用将自动设置为 6。这会影响 PostgreSQL 和 SQLite3。现在,转储器将为没有精度的列生成精度 0,并在精度为 6 时省略它。

将 job_id 和 exception message 添加到 ActiveJob 重试/丢弃日志中
在已执行作业的日志消息中,已包含 Job ID 和异常消息。但是,来自 ActiveJob::Exceptions 的重试/丢弃行为相关的日志消息不包含 Job ID 或异常消息。我们现在已将它们包含在内,格式与其他现有消息一致。

反转 structure.sql 转储中 INSERT 语句的顺序
这应该会降低合并冲突的可能性。新迁移现在将添加到列表的顶部。
对于现有应用程序,下次生成 structure.sql 时将有一个大的 diff。

自上次以来,25 位贡献者为 Rails 做出了贡献。一如既往,变化太多无法一一涵盖,但你可以在这里查看所有这些内容。下次再见!