2023年7月28日,星期五

本周 Rails - 2023 年 7 月 28 日

作者:zzak

大家好,我是 zzak。让我们一起来看看本周 Rails 代码库的改动。

Rack::Lint 增强 Rails 中间件测试
虽然这项工作在技术上并非面向用户,但确保 Rails 未来继续与 Rack SPEC 保持兼容性非常重要。如果您感兴趣或维护着依赖于 Rack 的库,可以阅读有关 Rack 3 升级指南 的更多信息。

转储 SchemaCache 时对其成员进行排序
此 PR 使生成 SchemaCache 的结果保持一致,从而允许使用文件摘要作为缓存键。

为音频分析器元数据添加标签
通过此更改,Active Storage 在分析音频文件时将提供元数据中的任何额外标签。例如,如果您需要访问编码器,这将非常有用。

引入“capture_emails”和“capture_broadcasts”
此 PR 将先前未发布的、已添加到“assert_emails”和“assert_broadcasts”中的行为恢复到这两个新方法中。

使 JRuby/TruffleRuby 上的 ActiveRecord 字符串引用名称缓存变得线程安全
此提交解决了在 TruffleRuby 上运行 Rails 应用程序时的线程安全问题。ActiveRecord 的字符串引用名称缓存会在构建 SQL 查询时更新。如果两个线程同时构建查询,它们都可能尝试更新缓存。这可能导致两个线程看到完全不同的缓存存储,从而在不同线程之间产生多个实时缓存,这会消耗额外的内存,并且可能难以调试。

在不必要时阻止检查传输数据
目前,每次调用“ActionCable::Channel::Base#transmit”时,都会生成一个检查提供的数据对象的调试日志消息。即使日志器的级别高于 WARN,也会生成此消息。此补丁使消息仅在可以记录时才生成。

使所有缓存存储对“#delete”返回布尔值
此 PR 使“Rails.cache.delete(‘key’)”的行为保持一致,使其在条目存在时返回“true”(否则返回“false”)。以前,RedisCacheStore 和 FileStore 的行为有所不同。

恢复 enums 上“where.missing”和“where.associated”的行为
此 PR 修复了一个回归错误,其中调用“associated”方法会导致错误的 SQL 查询,从而产生令人困惑的结果。

惰性反序列化缓存条目
这增加了缓存优化,使得过期和版本不匹配的缓存条目可以在不反序列化其值的情况下被检测到。当使用缓存格式版本 >= 7.1 或自定义序列化器时,将启用此优化。

支持替换缓存压缩器
此 PR 通过在“config.cache_store”上指定“:compressor”选项,增加了对替换序列化缓存条目所用压缩器的支持。与用于替换序列化器的“:coder”选项类似,后者负责缓存值,而编码器负责序列化整个“ActiveSupport::Cache::Entry”实例。

您可以在 此处 查看所有更改的列表。
上周,有 20 位贡献者 为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。