Rails 5.0!你敢相信吗?我们刚刚才庆祝了 Rails 1.0 发布十周年。时间过得真快,当你与好友们一起愉快地玩耍时,在 Rails 社区,我们从未有过如此多的乐趣或更好的朋友,所以难怪它能如此顺利地推进!这只是第一个 beta 版本,但 Rails 5.0.0.beta1 已经在生产环境上运行 Basecamp 3 了。
Rails 5.0 中最大的亮点是全新的 WebSocket 处理框架,名为 Action Cable。它是一个完全集成的解决方案,包含一个由 EventMachine 驱动的连接循环,一个用于服务器端处理的基于线程的频道层,以及一个用于客户端交互的 JavaScript 层。它使用起来非常简单,并使设计实时功能(如聊天、通知和状态显示)变得更加容易。如果您想亲眼看看它的实际应用,它正是 Basecamp 3 所有这些功能的驱动力。
Action Cable 最棒的地方在于,您可以在 WebSocket 操作中访问整个 Active Record 和 PORO 领域模型。我们甚至增加了一个全新的 ActionController::Renderer 系统,它让您在控制器外部渲染模板变得轻而易举,这样您就可以重用服务器端模板来响应 WebSocket 请求。
在开发环境中,Action Cable 与您的应用程序的其他部分运行在同一进程中。为了实现这一点,我们将默认的开发服务器从 Webrick 切换到了 Puma。在生产环境中,您可能希望将 Action Cable 服务器运行在它们自己的进程中。这正是我们在 Basecamp 进行大规模部署的方式。
特别感谢 Pratik Naik 和 Javan Makhmali 为其奠基性工作付出的努力。
Rails 不仅是构建使用服务器端渲染 HTML 模板的全栈应用程序的绝佳选择,也是新一代仅需要后端提供 JSON 的客户端 JavaScript 或原生应用程序的绝佳伴侣。通过新的 –api 模式,我们已经让这一点更加清晰。如果您使用 rails new backend --api 创建一个新的 Rails 应用程序,您将获得一个精简的骨架和配置,该配置假定您将使用 JSON 而不是 HTML。
这项功能还有更多工作要做,但我们已经取得了良好的开端。默认情况下,API 模式仅依赖于模型类的 #to_json 调用。但您可以使用 Jbuilder、Active Model Serializers,或者查看新的 JSONAPI::Resources 项目以获得更高级的解决方案。
特别感谢 Santiago Pastorino 和 Jorge Bejar 的贡献,使之成为可能。
为什么有些命令在 bin/rails 中,而有些命令在 bin/rake 中?这是一个常见的问题,尤其是对于初学者,我们从未给出一个好的答案(只有很多技术性的借口)。所以现在我们致力于让 bin/rails 成为那个统一所有命令的主命令。您可以通过它来访问所有 rake 命令,并且我们最终会将其中许多命令迁移过来。因此,您的手指现在需要习惯使用 bin/rails db:migrate 而不是 bin/rake db:migrate。这应该只需要几个月的时间!
Kasper Timm Hansen 一直负责这个项目。
您真的应该查看 CHANGELOGs。在所有框架中都有太多新的、好的内容。
Claudio 制作了一个 很棒的幻灯片集,其中介绍了他最喜欢的一些改进(和移除!)。
请注意,我们还在开发 Turbolinks 5——它包含了原生的 iOS 和 Android 包装器实现!——计划与 Rails 5 同时发布。您可以在 basecamp/turbolinks/v5 上关注进度。
根据我们的 维护策略,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 支持的唯一 Ruby 版本。
我们依赖社区所有人的反馈来在正式发布之前解决 bug 和升级问题。因此,请在您的应用程序中尝试使用 Rails 5.0,如果您今天正在启动一个新项目,并且您对 Rails 有一点了解,那么您应该使用 beta1 版本。
可以在 Github issues tracker 上提交问题。
到目前为止,已经有 789 人为这个新版本的 Rails 做出了贡献。请加入我们,成为其中一员!
Rails 5.0 的动态发布经理组合是 Eileen M. Uchitelle 和 Sean Griffin。而无可争议的 PR 合并冠军是 Rafael França!