2025年6月27日,星期五

BacktraceCleaner 获得 first_clean_frame 和 first_clean_location

作者:zzak

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

Rails基金会推出了一档新播客:“On Rails”,主持人是Robby Russell。
在每一期节目中,Robby都会与Rails开发者交流,探讨在构建、维护和扩展Ruby on Rails应用程序时所做的真实世界决策。第一期节目已上线,嘉宾是Rosa Gutiérrez。您可以在onrails.buzzsprout.com或您喜欢的播客应用中收听。

在测试用例中改进CurrentAttribute和ExecutionContext的状态管理
此前,当调用被Rails执行器(通常是Action Controller或Active Job助手)包装的代码时,这两个全局状态会被完全清除。现在,重新进入执行器将能够正确保存和恢复该状态。

实现ActiveSupport::BacktraceCleaner#first_clean_frame
新方法ActiveSupport::BacktraceCleaner#first_clean_frame返回调用者堆栈的第一个清理后的帧,或者返回nil。当您想报告某个事件发生的应用程序级别帧时,此方法很有用,例如,您可以跟踪生产环境中发出的警告的调用者。

实现ActiveSupport::BacktraceCleaner#first_clean_location
新方法ActiveSupport::BacktraceCleaner#first_clean_location返回调用者调用堆栈的第一个清理后的位置,或者返回nil。位置是Thread::Backtrace::Location对象。当您想报告某个事件发生的应用程序级别位置时,此方法很有用,例如,您可以跟踪生产环境中警告的源文件和行号。

尊重用户配置的IRB_NAME
Rails现在会遵守用户配置的IRB.conf[:IRB_NAME]。此PR使得IRB_NAME仅在不为默认值时才设置,类似于PROMPT_MODE的设置方式。

Active Job Continuation的隔离步骤
为步骤添加了isolated选项。默认值为false。隔离的步骤始终在其自己的作业执行中运行。这允许您单独执行一个长时间运行的步骤,这有助于确保在运行之前保存进度。

Postgres使用ntuples填充row_count而不是count
现在,sql.active_record通知中的row_count将使用PG::Result#ntuples(一个用于获取查询返回行数的libpq函数),而不是#count(该函数会遍历整个结果集)。

修复了检查未持久化的记录是否包含在严格HABTM关联中的问题
此前,即使HABTM关联已加载,尝试检查new_record?Post.new)是否包含在严格加载的has_and_belongs_to_many关联中,也会引发StrictLoadingViolationError

FileUpdateChecker和EventedFileUpdateChecker现在会忽略Gem.path中的更改
这应该能提高在开发环境中,对于拥有许多gem的应用的重新加载性能。

您可以在此处查看完整的更改列表。 在过去一周,我们有24位贡献者为Rails代码库做出了贡献!

下次再见!

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