自Rails 第一个公共版本发布以来将近 14 年了,我们很高兴以 5.2.0 终版发布框架的又一次重大升级。我们一直努力完善 Active Storage 和其他大型新组件以实现稳定发布,很高兴看到许多应用程序已在生产中运行候选版本。Basecamp和Shopify都已运行了相当长时间的 Rails 5.2.0。
此版本恰逢RailsConf召开,会议包括以下部分环节:加密凭证的新环节、对 Active Storage 的代码审查、如何升级到新 Rails 版本的建议以及大量的有关Webpack的讨论。
您可以在新完成的发行说明中,详细阅读 Rails 5.2 的所有新增功能。
请注意,rails/master开发目前针对 Rails 6.0。
非常感谢 Rails 内核、Rails 贡献者以及为 Rails 5.2.0 的发布提供代码、文档、错误报告和任何其他帮助的人员。令人惊叹的是,有400 多位代码贡献者参与了此版本。
Rails 中一直很难处理文件上传。当然,有很多精良的插件可用,但现在我们已将某些东西直接纳入框架是我们已经拖了很久的债务。所以,我们现在做到了!
使用 Rails 5.2 中的新Active Storage框架,我们解决了将文件直接上传到云中的现代方法。开箱即用,便可支持 Amazon 的 S3、Google 的 Cloud Storage 和 Microsoft Azure Cloud File Storage。
如果您处理的是图像,则可以随时创建变体。如果您处理的是视频或 PDF,则可以随时创建预览。而且无论类型如何,您都可以异步分析上传内容以提取元数据。
Active Storage 係由 George Claghorn 和不才提取自 Basecamp 3。因此,该框架不仅已在生产中使用,而且还诞生于生产当中。Extraction Design 保证标签完全没问题!
说到提取,Jeremy Daer 已经解开我们在 Basecamp 中用于 Redis 以使用常规部分、片段和其他 Rails 缓存作业时所使用的冗长的黑客丛林代码。有一个闪亮的新 Redis 缓存库,将多年的老练黑客技术整合到所有用户都可以使用的内聚单元中。
这个 Redis 缓存库支持 Redis::Distributed,类似于使用 Memcached 在 Redis 中分片。这个库具有容错性,因此会将失败视为未命中,而不是通过异常终止请求。它甚至支持分布式 MGET,以获得完整的部分集合缓存效果。
随着 密钥回收 和 压缩 作为默认选项而同时推出,这是一个巨大的飞跃,可提高缓存效率。对于 Basecamp,这意味着将缓存生命周期提高了两个数量级!我们的缓存从短暂到一天之内被清除,到现在可以持续数月。如果您正在使用部分缓存和嵌套策略,这两个更改将会极大地提高您的缓存生命周期。
我们还通过 Aaron Patterson 和 Eileen Uchitelle 的工作,采用了 HTTP/2 的樱桃,即 早期提示 。这意味着我们可以自动指令 Web 服务器尽早发送所需的样式表和 JavaScript 资产。这意味着更快速的整页交付,谁会不想要呢?
在性能主题方面,Rails 现在随在默认 Gemfile
中的 Bootsnap 一起发布,由我们在 Shopify 的朋友创建。它通常将应用程序的启动时间减少 50% 以上。
Rails 一直处于让您的 Web 应用程序更安全的领先地位,引领了内置 CSRF 和 XSS 保护的潮流,并且我们在 Rails 5.2 中通过 添加一个新的 DSL 进一步增强了这一功能,该功能允许您为应用程序配置 内容安全策略 。您可以配置一个全局默认策略,然后在每个资源的基础上覆盖它,甚至可以使用 lambda 在标头中注入每个请求的值,例如多租户应用程序中的帐户子域。
但这不仅仅是一些令人眼花缭乱的新奇事物。在 Rails 5.1 中,我们添加了 加密的秘密 。这些秘密就像旧秘密一样,但是,呃,更秘密,因为,你知道的,加密!令人困惑?是的。您为什么要想要根本不秘密的秘密?您不需要。
在 Rails 5.2 中,我们通过弃用两种不同类型的秘密并引入了一个称为 证书 的新共享概念来纠正这一混乱。证书(例如 AWS 访问密钥和其他形式的登录和密码)是秘密的主要用例,所以为什么不直呼其名呢。就这样做吧!
凭证始终加密。这意味着将它们检入修订控制是安全的,只要你将密钥保留在控制之外。这意味着原子部署,无需处理大量环境变量,以及将应用程序所需的所有凭证集中放在一个地方的其他优点,安全可靠。
此外,我们已经公开了凭证的基础 API,因此你可以轻松处理其他加密配置、密钥和文件。
自 Rails 5.1 以来,我们还通过Webpacker 取得了长足进展。因此,Rails 5.2 旨在与新的 Webpacker 3.0 版本完美配合。Rails 已使用 Webpack 运行的预配置构建管道完全采用了现代 JavaScript。我们不断加强这种关系。