2016 年 6 月 30 日星期四

Rails 5.0:Action Cable、API 模式等等

作者:dhh

经过六个月的完善、四个 beta 版本和两个候选版本,Rails 5.0 终于完成了!它花费了数百名 贡献者 和数千项提交,但它的目标令人惊叹:Rails 5.0 无疑是迄今为止最棒的、最完整的 Rails 版本。时至今日,这个社区仍然如此强大,真是令人难以置信。感谢所有帮助我们完成这项工作的人们。

Rails 5.0 的两大特色功能如下所示

Action Cable

Action Cable 是一个用于处理 Rails 中 WebSocket 的全新框架。这是一个用于管理连接、用于服务器端处理的频道层,以及用于客户端交互的 JavaScript 层的完全集成解决方案。它非常易于使用,而且极大地简化了设计聊天、通知和呈现等实时功能。如果您想在实际操作中了解这个功能,那么它正是 Basecamp 3 所有那些功能背后的驱动力。

Action Cable 真正可爱的之处在于,您在 WebSocket 工作中获得了对整个 Active Record 和 PORO 域模型的访问。我们甚至添加了一个全新的 ActionController::Renderer 系统,当您希望对 WebSocket 响应复用服务器端模板时,利用这个系统可以在控制器外部轻松地渲染您的模板。

在开发中,Action Cable 与您的应用程序的其他部分一起以进程内模式运行。为此,我们将默认开发服务器从 Webrick 切换到 Puma。在生产中,您可能希望在它们自己的进程中运行 Action Cable 服务器。这就是我们在大规模 Basecamp 中运行它的方式。

特别感谢 普拉蒂克·纳伊克贾万·马克哈马利马修·德雷珀 对 Action Cable 的开创性工作。

API 模式

在希望构建对 HTML 模板进行服务器端渲染的全栈应用程序时,Rails 并不是仅有的绝佳选择;它还是需要后端来说 JSON 的客户端 JavaScript 或原生应用程序的新兴力量的绝佳伴侣。我们现已通过新的 API 模式让这一点变得更加明确。如果您使用 rails new backend --api 创建新的 Rails 应用程序,您将获得精简的框架和配置,它假设您将使用 JSON,而不是 HTML。

虽然此一功能仍有许多工作尚待完成,不过我们有了一个良好的开端。预设值 API 模式仅依赖模型类别的 #to_json 调用。不过,您也可以使用 JbuilderActive Model Serializers,或查看新的 JSONAPI::Resources 项目以寻找更进阶的解决方案。

特别感谢 Santiago PastorinoJorge Bejar 促成了此一成果。

其他亮点

  • 一个 Rails 指令取代先前分散的 rake 和 rails 分割式设定,因此现在使用 bin/rails db:migrate 代替 bin/rake db:migrate (由 Kasper Timm Hansen 主导)。
  • Sean Griffin 推出的 新属性 API
  • 测试运行程式现在会于内联报告错误,因此您无需完成整个套件即可了解出错情况。
  • ApplicationRecord 已成为所有由产生器所建立模型的预设父类别。
  • ActiveRecord::Relation#in_batches 使处理批次记录工作变得容易许多,得以一次减少内存超载。
  • Post.where(‘id = 1’).or(Post.where(‘id = 2’)) 正是您所想的。
  • 不再误停 Active Record 回调,因为上一条陈述为 false。现在您会明确抛出(:abort)!

不过,您真的应该签出变更日志。所有架构中都有许多全新且好用的东西

Rails 5.0 也搭载 Turbolinks 5 – 它拥有原生的 iOS 和 Android 包装程式导入!如果您过去已经排除 Turbolinks,我强烈建议您签出 Sam Stephenson 的 RailsConf 报告:Turbolinks 5:我不敢相信这不是原生功能!

Rails 5.0 的完整版本说明 中有更详细的内容,而且 Claudio B. 做了一份 简洁且好的简报,涵盖他最喜爱的几项改善内容(以及移除的内容!)。我还制作了一个全新的 让我们在 Rails 5 构建部落格 影片,以展示其基础知识。

您动态的 Rails 5.0 版本发行经理是 Eileen M. UchitelleSean Griffin。而当之无愧的公共关系合并冠军是 Rafael França

注意:根据我们的维护策略,Rails 5.0 的发布意味着:纠错仅适用于 5.0.x,普通安全问题适用于 5.0.x 和 4.2.x,严重的安全问题也适用于 5.0.x 和 4.2.x(但当 5.1 脱离时,适用于 5.1.x、5.0.x 和 4.2.x)。这意味着 4.1.x 及更低版本将实质上不受支持!Ruby 2.2.2+ 现在也是唯一受支持的 Rails 5.0+ 版本。