首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

“我又爱上了「将死」的 Ruby on Rails”

翻译工具 | ChatGPT       责编 | 梦依丹

出品 | CSDN(ID:CSDNnews)

在 2007-2008 年间,彼时恰逢 Ruby 最火的时候,我开始接触到 Ruby on Rails,并能获得可观的薪水。彼时的它还应用在时下不少大的互联网公司,比如 Twitter、AirBNB、Shopify 等等。

Ruby编程语言在TIOBE上的流行曲线

然而好景不长,大约到了 2013 年,我开始意识到 Rails 正在逐渐衰落,亦或者说不再流行。彼时受欢迎的 Node.js 出现在各个项目中,一些快速的 API 开发开始转向 Go,大量的前端架构开始涌现。

黄金时代已过去

当下可以肯定的说,Rails 已失去光辉,工作机会大幅减少,薪水下降。尽管我在过去 15 年的大部分时间都在使用 Rails,但我已接受了 Rails 衰落这样的事实。他变得如此臃肿,几乎每个使用它的人都在用 Rails+React 或者其它组合。

尝试其它框架

有了空闲时间,我决定接一些副业做做,希望利用我热爱的编码工作赚点钱。

然而...事情并没有按计划进行。我尝试了所有的编程语言和框架。Rust 与Leptos/Dioxus、SvelteKit、React、NextJS、RemixJS、SolidJS/Start、Elixir/Phoenix。最糟糕的是,我在完成一个应用后,我还会用其他语言重新写一个。我写了六个完全相同的待办事项应用,甚至用 PHP 来写过,但我不会再用 Rails。

对我来说,Rails 太笨重,很庞大,而且在 Ubuntu 上安装起来很麻烦,我很讨厌它。而使用 Node 或 GO,我只需要 2-3 分钟安装语言,应用就能在服务器上运行。太简单了,我喜欢这种感觉。

但我总觉得缺了点什么,我在开发这些应用时一直在追求某种东西,但我不知道具体是什么。总是觉得缺了点什么。有些 JavaScript 框架非常流行,但甚至像通过 RPC 调用获取 cookie 这样的简单操作也变得困难。这些新潮的框架看起来不错,但实际运行效果并不好。

在 Nuxt 中,我遇到了 cookie 的问题,处理 cookie 的最佳选择是一个第三方插件,但它几乎被放弃了,至少文档很糟糕,活跃度也不高。然后我会使用类似 AlpineJS 这样的框架,它很不错,但不支持组件。

作为一个程序员,这真的让我感到痛苦。为什么这些东西如此困难?这本不应该那么难。

尽管一直有人吐槽 Rails 已死,甚至很多人觉得 Twitter 使用它就是个错误,但在 Web 2.0 时代,Rails 就像一艘宇宙飞船,构建了非常多的产品。最近,Rails 之父 DHH(David Heinemeier Hansson)表示:“ Rails 是其关心的一项遗产”。我感觉他对 Rails 的赞美像是一个紧紧抓住即将沉没船只的人。这主要是因为现在的世界已经不再使用 Rails,而且我看到很多人对基于 Rails 的电子邮件服务 Hey 的评价相当差,认为相比本地应用程序或基于 JavaScript 的应用程序来说,它显得笨重。

但他最近也说了一些引发我思考的话,他提到自从 Twitter 迁移到其它技术后,功能开发就停滞不前了,我本来对微服务就持反对意见,但实话实说,过去十年,Twitter 几乎没添加什么新功能。

再次尝试 Rails

我之前用另一种语言重新编写了一个应用程序,所以我决定再次尝试 Rails。我使用了 7.1 版本,虽然一年半没有使用 Rails,但我实际上忘记了很多东西。但我很快就能回想起来。

经过两天的努力,我完成了应用程序,现在熟悉的感觉又回来了。这就是为什么我对之前写的其他应用程序感到不满意。尽管 Rails 有一些缺点,但它真的令人难以置信。如果你需要在模型之间建立关联并进行关联删除,没有问题。

只需要这样写:

has_many :posts, dependent: :destroy

就是这样简单。我之前在使用 Prisma 和 Node 做同样事情时,真是太痛苦了。在 Prisma 中,我需要写一个 20 行的查询,在 Rails 中只需要 2 行。我意识到之前使用其他语言编写的应用程序让我感到痛苦,因为需要写太多额外的代码。Ruby 的使用非常简单,但又非常强大。

在其他框架中,我遇到的另一个问题是如何获取当前用户。你需要使用中间件,但经常会遇到问题。我必须将用户信息添加到请求对象中,而在某些 JavaScript 框架中,你在不同的时间获取到的请求对象可能不一样,导致数据不一致。

而在 Rails 中,我只需要创建一个 AdminController,在其中编写一个 current_user 方法,并让其他管理员控制器继承它。太容易了,真是轻松自在。我感觉自己就像是在森林中迷失了几个月的人,现在终于回到了文明社会,不再为了获取基本生活必需品而苦苦挣扎。

此外,现在有了很好的 Turbo 集成,你真的不需要使用前端框架。可能只需要在某些复杂表单上使用一些 JQuery 或 alpine JS,但对于大多数页面来说,Rails 开箱即用的功能就像一个单页应用程序(SPA)。

PHP 的 Laravel 也很不错,并且还有很多附加功能。但我真的对 Rails 的卓越表现感到惊叹。我真不明白为什么有那么多应用程序使用 JS 框架而没有 Rails 拥有的所有功能。

Rails 内置的众多功能,目前还没人创建出具备验证功能、出色的 ORM 和其他 Rails 所拥有的功能的框架,使用其它框架时,你必须自己添加所有必要的功能。

Rails 的未来会如何?

再次体会到 Rails 的强大之后,我决定将所有项目都重新 Rails 一遍。于我而言,唯一的问题是必须使用 Docker/Compose。我不想部署到像 Heroku 这样的平台,因为它们总是改变规则,我不得不进行紧急升级,因为它们取消了某些堆栈和服务商。

但这没关系。我写了一个带有 NGINX 的 Docker Compose 文件,部署也没有问题(暂时使用sqlite)。

那么 Rails 的未来会怎样呢?我不认为它会再次成为创业公司的主要选择,因为它正在被时代所遗弃,但正如我现在意识到的,它也许本就不该成为主要选择。我不会用 Rails 编写一个每秒处理 25000 个请求的API,我会选择 Go,但对于一个真实的应用程序来说,Rails 仍然是一个非常好的选择。

而且在 Rails 中开发速度非常快。服务器成本可能会增加一倍,但实际上你必须发展得相当大才会真正感受到成本的重要性。

我现在重新爱上了 Rails,但我确实觉得它是一个有些衰落的框架。也许这样也没关系。也许它会成为一种类似 Cobol 的语言,让人们在未来几年中依然可以用它获得高薪。

即使它的辉煌时期已经过去,我对未来充满期待,因为我现在知道我之前错过了什么。

网友:选择太多,但 Rails 会一直存在

这篇文章在 reddit 上引起了大家的广泛讨论,开发者 devanil 认为:Rails 并未衰落,虽然他没有见证到 Rails 黄金时期,但自从他加入 Rails 社区以来,他只看到 Rails 的壮大和持续优化的状态。他觉得大家与其讨论 Rails 死亡,不如思考如何让他重新归来。

也开发者表示,现在可选择的框架实在太多,让已经离开的人重新回来并不容易,而且很多人处于各种原因不太喜欢 DHH,但他认为 Rails 会一直存活下去。

在摆脱 Webpacker 之后,Rails 迎来了轻微的复兴。

除了语言本身的讨论,不少开发者将目光聚焦在了版本变更管理上,其中第一条评论就是:为什么在 Ubuntu(或其他Linux发行版,或Mac)上安装 Rails 很困难?使用像 rbenv 或 asdf 这样的 Ruby 版本管理器,只需要 3-4 个命令和 10 分钟的时间,其中大部分时间都是在等待下载/编译的过程中。

对此,有网友评论道:在老的版本上可能会比较困难,需要进行一些手动配置等。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OadhCR3MIVB9fxWqUdsgfsVQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券