2023 年 9 月 29 日,星期五

这一周的 Rails - 9 月 29 日

沃伊切克发布

嗨,我是 沃伊切克Rails 世界将于下周开始。当前《这一周的 Rails》社论团队的三位成员,即格雷格、埃马纽埃尔和我,将出席会议。我们制作了一些印有新闻稿标志的贴纸,请务必找到我们领取一个!现在,让我们深入探讨 Rails 代码库中的最新更新。

7.1.0.rc1 版本的 Rails 发布
距离 7.1 版的 Rails 最终发布更近一步。

添加用于广播日志的公共 API
此功能已存在一段时间,但到目前为止它还是一个私有 API。广播日志允许将日志消息发送到差异接收器(STDOUT、文件等),并且默认在开发环境中使用,以便将日志同时写入 STDOUT 和“development.log”文件中。

broadcast = ActiveSupport::BroadcastLogger.new(Logger.new(STDOUT), Logger.new("development.log"))
broadcast.info("Hello!") # The "Hello!" message is written on STDOUT and in the log file.

允许将 File 或 Pathname 附加到 has_one_attached
在测试中创建模型时,这可能特别方便,因为传递 FilePathname(例如,从 file_fixture)更轻松

User.create!(avatar: File.open("image.jpg"))
User.create!(avatar: file_fixture("image.jpg"))

引入 ActionView::TestCase.register_parser
注册一个可调用的函数来为给定的 MIME 类型解码呈现的内容。
每个已注册的解析器还将定义一个 #rendered.$MIME 帮助器方法,其中 $MIME 对应于 mime 参数的值。

register_parser :rss, -> rendered { RSS::Parser.parse(rendered) }

默认情况下,会注册 :html:json 的解析器。

添加 HTML 标记名称的 HTML 标记验证
tagcontent_tag 帮助器方法中添加了对 HTML 标记名称的验证。这些方法现在检查所提供的标记名称是否符合 HTML 规范。如果提供了无效的 HTML 标记名称,则该方法会引发一个 ArgumentError,并附有适当的错误消息。

添加 expires_at 选项到 ActiveStorage::Blob#signed_id
提供 expires_at 将在给定时间后使链接过期

rails_blob_path(user.avatar, disposition: "attachment", expires_at: 30.minutes.from_now)

引入 ActionMailer::FormBuilder
在邮件程序中使用 default_form_builder 方法为该邮件程序呈现的模板设置默认表单生成器。与 Action Controller 中的行为相匹配。

将 deep_merge 提取到 Active Support DeepMergeable
ActiveSupport::DeepMergeable 模块允许类只需通过实现一个 merge!(other, &block) 方法即可提供 deep_mergedeep_merge! 方法。仅当它们兼容时,值才会深度合并,具体取决于 deep_merge? 方法。默认情况下,这只包括相同类或其子类的实例。一个类可以覆盖 deep_merge? 以进一步限制或扩展深度可合并值的域。
这允许 在 ActionController::Parameters 上支持 deep_merge

修复 Range#overlap? 忽略空范围
以前,当一个范围实际上是“空”时,#overlap? 会错误地返回 true。
Ruby 3.3 引入了 Range#overlap?,因此这也确保了这两个实现返回相同的结果。

提升 SQLite3 适配器连接配置的性能
对于 Rails 应用程序,当写入日志在正常同步模式下运行,且共享日志大小、共享内存缓冲区和共享缓存处于正常状态时,将平均提升 2 倍的性能。

允许使用简单的最大重试次数配置 SQLite3 busy_handler
对性能敏感的应用程序建议重试忙碌连接,而无需延迟。增加对 _database.yml_ _retries_ 整数的支持,该整数用于简单的 _busy_handler_ 函数中,以在没有指数退避的情况下重试忙碌连接,最多 _retries_ 次。

将 Active Job scheduled_at 属性设置为一个时间对象
将 _scheduled_at_ 的值序列化和反序列化为时间对象。还将 _enqueued_at_ 反序列化为时间对象。此外,向 _scheduled_at_= 分配数字/历元值已弃用。

修复 MySQL 架构中检查约束表达式的引号重复转义
包含引号的检查约束表达会导致使用 _mysql2_ 适配器时出现无效模式转储。

您可以在 此处 查看完整的更改列表。
过去一周,有 39 位贡献者 为 Rails 代码库添砖加瓦!

下次见!

订阅 以收到这些更新的邮件。