2020年12月1日,星期二

Rails 6.1 RC2:水平分片、多数据库改进、严格加载、后台删除关联、错误对象等!

发布者:rafaelfranca

Rails 6.1 的第二个发布候选版本已经发布,为已经尝试使用此版本的用户带来了更稳定的体验。我们一直在努力调整和优化,以确保所有用户都能顺畅地使用此版本。最终版本计划于下周发布。

Rails 这些年来的发展令人惊叹,虽然我们在 入门流程 方面还有一些需要改进的地方,但 Rails 从未如此出色。此版本中的功能侧重于添加您在未来几年内保持应用程序正常运行所需的功能。

让我们看看一些新功能

多数据库改进

按数据库连接切换

Rails 6.1 提供了 按数据库切换连接 的能力。在 6.0 版本中,如果您切换到 `reading` 角色,则所有数据库连接也会切换到 reading 角色。现在在 6.1 版本中,如果您在配置文件中将 `legacy_connection_handling` 设置为 `false`,Rails 将允许您通过调用相应抽象类上的 `connected_to` 来切换单个数据库的连接。

水平分片

Rails 6.0 提供了功能分区(多个分区,不同模式)数据库的能力,但不支持水平分片(相同模式,多个分区)。Rails 不支持水平分片是因为 Active Record 中的模型每个类每个角色只能有一个连接。现在这个问题已得到修复,Rails 支持 水平分片

其他改进

除了添加水平分片支持外,我们还为多数据库添加了大量新功能并改进了许多内部机制。 Kyle Thompson 添加了对 数据库命名空间任务 的支持,例如 `db:schema:dump:namespace`、`db:schema:load:namespace`、`db:structure:dump:namespace` 和 `db:structure:load:namespace`。Shopify 的 Jean Boussier 改进了 连接池管理

严格加载关联

除了许多数据库和连接管理改进之外,Aaron PattersonEileen M. Uchitelle 添加了对 严格加载关联 的支持。通过此功能,您可以确保所有关联都已急切加载,并在 N+1 问题发生之前阻止它们。 Kevin Deisz关联声明 添加了额外的支持,而 bogdanvlviv 添加了将 严格加载作为默认设置 的支持。

委托类型

Rails 6.1 添加了“委托类型”,作为单表继承的替代方案。这对于表示类层次结构非常有用,允许超类成为由其自身表表示的具体类。每个子类都有自己的表用于存储附加属性。查看 PR,由 DHH 撰写。

异步删除关联

异步删除关联为应用程序提供了在后台作业中 destroy 关联的能力。这有助于避免在删除数据时应用程序出现超时和其他性能问题。该 实现 是一个集体努力——PR 由 Basecamp 的 George Claghorn 启动,GitHub 的 Cory Gwin 提供了进一步支持,并由 Shopify 的 Rafael FrançaAdrianna Chang 完成。

错误对象

Active Model 的错误现在是对象,其接口允许您的应用程序更轻松地处理和交互由模型引发的错误。 此功能lulalala 实现,包括查询接口,支持更精确的测试,并可以访问错误详细信息。

Active Storage 改进

Active Storage 在 Rails 6.1 中得到了很好的更新!您现在可以为要存储附件的服务配置附件。该 功能Dmitry Tsepelev 实现。

此外,Rails 6.1 为 Active Storage 添加了对 Blob 的永久 URL 的支持。此功能由 Shopify 的 Peter Zhu 实现,它允许您配置附件使用私有或公共 URL,并确保公共 URL 始终使用永久 URL。

不允许的弃用支持

如果您希望您的应用程序运行过程中没有任何弃用警告,那么此功能非常适合您。该功能允许应用程序 在抛出弃用警告时可选地引发错误。这有助于确保开发人员不会重新引入已修复的弃用警告。该功能由 Test Double 的 Cliff Pruitt 实现!

性能改进和错误修复!

一个版本不仅仅在于你获得的出色功能。它还关乎修复错误、提高性能以及让 Rails 对每个人来说都更稳定。此版本包括一项改进,该改进 避免在 `where` 传递空数组时发出查询,由 Molly Struve 报告,由 John Hawthorn 实现修复。 Eileen M. UchitelleAaron Patterson 还实现了一项 性能改进,在知道所有值都是整数时,可以加快 `where` 查询的速度。

`classic` 自动加载器已被弃用

自第一个 Rails 版本以来,`classic` 自动加载器一直很好地为我们服务,但现在有了新的选择,它将开始其弃用周期。

强烈建议新的 Rails 项目不要使用 `classic` 自动加载器,并且我们建议正在使用 `classic` 的现有项目在升级时切换到 `zeitwerk` 模式。请查看 升级 Ruby on Rails 指南以获取提示。

还有更多!

Rails 6.1 带来了许多重大改进。686 人为 Rails 贡献了力量。请查看 变更日志,了解更多关于错误修复、性能改进和其他功能的信息。

感谢所有报告错误、提交 PR 并帮助改进 Rails 的人。Rails 因你们的辛勤工作而变得更好!

我们希望您能够测试 Rails 6.1,并像我们一样喜欢它。请将任何错误报告至 Rails 问题跟踪器