2024年3月29日,星期五

重试已知的幂等 SELECT 查询、新的 Active Record 配置选项以及更多!

发布者:Emmanuel Hayford

您好!我是Emmanuel Hayford,为您带来每周的“本周 Rails 快讯”。我们直接开始吧。  两个新指南现已开放社区评审。如果您精通 Action View、partial 和 helper,请在此处进行评审并提交您的反馈

添加 config.active_record.permanent_connection_checkout 设置
此设置决定了在访问 ActiveRecord::Base.connection 时采取的操作:是引发错误、发出弃用警告,还是什么都不做。

ActiveRecord::Base.connection 会从连接池获取数据库连接,并一直保持到请求或作业结束。然而,在线程或协程数量多于可用连接的环境中,此行为可能会适得其反。

此配置有助于识别和消除使用 ActiveRecord::Base.connection 的代码,鼓励改用 ActiveRecord::Base.with_connection。默认行为保持不变。

使 ActiveSupport::BacktraceCleaner 在 dup 时复制 filters
增强 ActiveSupport::BacktraceCleaner 以在复制和克隆时复制 filters 和 silencers。

以前,复制后内部的 silencers 和 filters 数组仍然是共享的,导致状态泄露。

确保将必要的选项添加到关联选项中
注意到 :through 中的拼写错误,请参考以下代码示例

class User < ApplicationRecord
    has_many :courses
    has_many :assignments, trough: :courses
end

您将收到类似以下内容的误导性错误消息:

“未知键::trough。有效键为::class_name, :anonymous_class, :primary_key, …, :index_errors (ArgumentError)”,

通过此拉取请求,您现在将收到更清晰的消息,类似于:

“未知键::trough。有效键为::class_name, :anonymous_class, :primary_key, …, :index_errors, :through (ArgumentError)”。

请注意,在第二个错误消息中,:through 已包含在有效选项列表中。

在与连接相关的异常情况下重试已知幂等的 SELECT 查询
实现一种机制,在发生与连接相关的异常时自动重试已知是幂等的 SELECT 查询。

通过 Arel 树遍历或基于已知模型属性构造的查询本质上是幂等的,并且在遇到连接错误时可以安全地重试。以前,像 TrilogyAdapter 这样的某些适配器在请求期间遇到连接错误时会引发 ActiveRecord::ConnectionFailed: Trilogy::EOFError

上周,我们有 22 位贡献者为 Rails 代码库做出了贡献!

请保重。

每周为您提供来自 Rails 的有趣提交、拉取请求等方面的内部快讯。

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