2021年6月18日,星期五

Rails 6.0.4、大量 Active Storage 好东西以及许多生活质量改进!

作者:zzak

大家好,我是zzak,带来上周 Rails 的最新变动。

Rails 6.0.4 已发布

此版本包含大量错误修复,务必升级!您可以在此处阅读完整的更改摘要。

提高 MySQL 中未类型化绑定值的安全性

这解决了 MySQL 中潜在的查询操纵漏洞。

提高无效配置下的多数据库可用性

在使用 config.active_record.writing_role(:all) 时,如果 pool_config 为 nil,现在会引发一个有用的异常。

Active Record 加密增强

在 Active Record 中引入加密后,又新增了几项新功能和一项错误修复!

添加对预加载 Active Storage 变体的支持

此 PR 消除了在使用 with_all_variant_records 和 with_attached_* 作用域时 Active Storage 中的 N+1 查询。

修复通过关联的严格加载

之前在使用 strict_loading 时存在一个错误,即预加载不会通过关联传播。

在 package.json 中使用当前的 Rails 版本

之前在生成新的 Rails 应用程序时,package.json 会为所有 npm 依赖项硬编码字符串“6.0.0”。现在它会使用生成应用程序的 Rails 版本。

添加对 Active Storage 过期 URL 的支持

这允许通过“expires_in”参数或通过设置“config.active_storage.urls_expire_in”的默认值来使 Active Storage 中的签名 blob ID 的 URL 过期。

支持 GCS Active Storage 的默认“cache_control”

此 PR 为使用 Google Cloud Storage 服务的上传添加了设置默认“cache_control”标头的功能。

使用 FFmpeg 场景检测生成视频预览

通过使用 FFmpeg 的内置功能,Active Storage 现在可以为视频生成更好的缩略图。这些参数也在后续 PR中变得可配置!

弃用 Active Storage 附件关联模型上的“purge”和“purge_later”

您应该直接在附件上调用这些方法,而不是在关联上。

添加与 Model.update 类似但会引发异常的 Model.update! 方法

您可能熟悉实例方法 Model#update!,但现在您可以在类上执行此操作了!

CollectionAssocation#build 中的性能回归

这修复了具有大量记录的反向关联的一个巨大的性能 bug。

减少 stat(2) 调用

经典的nobu。此补丁后来在后续 PR中得到了优化!

不要将 UJS 表单提交处理程序附加到 Turbo 表单

这项生活质量改进适用于从 RailsUJS 迁移到 Turbo 的应用程序,其中两者都存在于代码库中,以便轻松区分哪个应该处理表单。

自上次以来,有 28 人为 Rails 贡献了代码。所有更改都可以在此处查看。下周再见!