Rails 6.1 已经发布,哇,它有大量精彩的内容!我们这几月都在努力工作,为多个数据库实施改进,增加了在作业中(而不是内存中)销毁关联的支持,将错误转换成对象,以及更多内容。
这些年 Rails 的发展令人惊讶,尽管我们对 加入流程 进行了若干项改进,Rails 依然前所未有地好。此版本中的特性专注于添加你所需的可用性,以便应用在未来几年内保持正常运行。
让我们看一下一些新功能
Rails 6.1 为你提供了 按数据库切换连接的能力。在 6.0 中,如果你切换到 reading
角色,那么所有数据库连接也切换到阅读角色。现在,如果你在配置中将 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 Patterson 和 Eileen M. Uchitelle 还增加了对严格加载关联项的支持。有了该功能后,便可确保所有关联项急切加载并阻止 N+1 发生。 Kevin Deisz 在关联项声明中添加了其他支持,而 bogdanvlviv 则增加了支持,以便默认启用严格加载。
Rails 6.1 增加“委托类型”作为单表继承的替代选项。这有助于表示类层次结构,允许超级类成为一个由其自己的表表示的具体类。每个子类有其自己用于其他属性的表。查看 PR,这份请求由 DHH 撰写。
销毁关联项异步添加了应用程序以在后台作业中销毁
关联项的能力。在销毁数据时,这可以帮助您避免应用程序中的超时和其他性能问题。 实现 是一项集体工作 - PR 由 Basecamp 的 George Claghorn 发起,GitHub 的 Cory Gwin 提供了进一步支持,而最终由 Shopify 的 Rafael França 和 Adrianna Chang 完成。
Active Model 的错误现在是具有允许您的应用程序更轻松地处理和交互模型抛出的错误的界面的对象。 此功能 由 lulalala 实现,其中包括一个查询界面,支持更精确的测试以及错误详细信息访问。
在 Rails 6.1 中,Active Storage 得到了一次很棒的更新!现在,您可为要将附件存储到的服务配置附件。 此功能 由 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. Uchitelle和Aaron Patterson还实现了一个性能改进,当我们知道所有值都是整数时,它可以加快where
查询的速度。
classic
自动加载器已被弃用classic
自动加载器自从第一个 Rails 版本发布以来一直很好地为我们服务,但是有一个新成员出现了,它将开始其弃用周期。
强烈建议新 Rails 项目不要使用classic
自动加载器,我们建议在升级时运行于classic
的现有项目切换到zeitwerk
模式。请查阅Upgrading Ruby on Rails指南以获取提示。
Rails 6.1 中有非常多的出色变更。654 人员为 Rails 做出了贡献。查看CHANGELOG以获得有关错误修复、性能改进和其他功能的更多详细信息。
感谢报告错误、发送拉取请求以及帮助改进 Rails 的每个人。 dzięki ciężkiej pracy Rails staje się coraz lepszy!