2022年7月4日,星期一

改进的 PostgreSQL 支持、性能改进以及更多...

由 p8 发布

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

优化 Active Record 批量处理

Active Record 将通过范围进行迭代(WHERE id >= num1 AND id < num2),而不是为批量查询指定长 ID 列表(WHERE IN (…ids…))。

为 PostgreSQL 索引添加有效性检查

使用 CONCURRENTLY 创建索引时,可能会导致索引无效。现在您可以检查索引是否有效。

为 PostgreSQL 排他约束添加支持
这扩展了 Active Record 的迁移/模式转储功能,以支持 PostgreSQL 排他约束

为 ActiveSupport::Cache::Store#fetch_multi 添加 :force 支持
设置 force: true 会强制进行缓存“未命中”,这意味着即使缓存值存在,我们也将其视为缺失。#fetch_multi 现在支持 #fetch 的所有选项。

避免在唯一字段未更改且有唯一索引支持时进行验证

以前,保存记录时,Active Record 会执行额外的查询来检查每个具有唯一性验证的属性是否唯一,即使该属性未更改。

如果数据库具有相应的唯一索引,则对于已持久化的记录,此验证永远不会失败,我们可以安全地跳过它。

使 Notifications::Fanout 更快更安全
此更改旨在改进 ActiveSupport::Notifications::Fanout。它应该能更安全地订阅/取消订阅进行中的主题。除了 evented 之外,它在所有情况下都明显更快。

strip_tags 返回的字符串的 html_safe? 检查已正确处理

由于 strip_tags 返回的字符串不包含 HTML 元素,并且基本实体已转义,因此它们可以安全地作为 PCDATA 直接包含在 HTML 内容中。将它们标记为 html-safe 可以避免在渲染时与 SafeBuffer 连接时发生双重转义。

正确检查运行 app:update 时框架是否被禁用

创建新的 Rails 应用程序时,可以使用 --skip-* 选项来禁用框架。升级到新版本 Rails 后,可以通过运行 bin/rails app:update 来更新所有配置。此更改确保在升级后禁用框架仍然保持禁用状态。

默认启用 MemCacheStore 和 RedisCacheStore 的连接池

缓存存储可以使用 单个 pool 选项启用连接池。现在,此选项将默认启用 MemCacheStore 和 RedisCacheStore。

为 MessageVerifier 和 MessageEncryptor 构造函数添加 :urlsafe 选项

MessageVerifier 和 MessageEncryptor 构造函数现在接受 :urlsafe 选项。启用此选项后,可确保消息使用 URL 安全编码。

支持在不带块的情况下调用带有降序的 in_batches

所有批量处理方法 都可以使用 降序调用。此更改为不带块调用的 in_batches 添加了此功能。

允许 db:prepare 在数据库已存在但为空时加载模式

以前,如果数据库已存在但未填充表,db:prepare 会运行所有迁移。
现在 db:prepare 将加载模式,然后运行任何剩余的迁移,以使数据库达到最新状态。

自上次以来,共有 84 人为 Rails 贡献了代码。和往常一样,有很多更改无法一一介绍,但您可以在 这里 查看所有更改。下次再见!