2022 年 2 月 11 日,星期五

Rails 7.0.2、基于 Rails 版本的 schema 版本控制等

发布者:p8

嗨,我是 Petrik,我为您带来来自 Rails 世界的最新新闻。

Rails 7.0.2 已发布
虽然这看起来像一次常规补丁发布,但有一些值得注意的更改。
首先,7.0.0 中引入的一个功能已被移除:将 service_name 参数传递给 DirectUploadsController 的能力。在从 Rails 6.1 升级时,此功能会导致重大问题,因此 Rails 团队决定在他们进行向后兼容更改时将其移除。他们不会轻易做出这个决定,并且通常不会在发布后在没有适当的弃用周期的情况下删除功能,但在此时他们决定优先让用户更轻松地升级。

最后,出于同样的目标,Rails 7.0.2 引入了一项新功能,基于 Rails 版本控制数据库架构的能力。此新功能将使现有应用程序仍然能够加载在 Rails 6.1 中生成的数据库架构,并保持与之前相同的行为,使其与生产数据库架构相匹配。

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

#to_fs 设置为 #to_s(:format) 的默认替换项
由于 Ruby 3.1 优化了插值,#to_s(:format) 最近已弃用,以支持 #to_formatted_s#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 时省略它。

ActiveJob 重试/放弃日志记录添加作业 ID 和异常消息
已在已执行作业的日志消息中包含作业 ID 和异常消息。但与 ActiveJob::Exceptions 中的重试/放弃行为相关的日志消息不包含作业 ID 或异常消息。我们现已按照与其他现有消息一致的格式包含它们。

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

自上次以来,25 人为 Rails 做出了贡献。一如既往,更改太多无法涵盖,但您可以在此处查看全部更改。下次见!