1

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

 9 months ago
source link: https://www.techug.com/post/i-fell-in-love-with-the-dying-ruby-on-rails-again63d5ed32437aafdb8a8f/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

【CSDN 编者按】本文是近期 reddit 上一篇总结 Ruby on Rails 从兴盛到衰落的文章,在作者对 Rails 心灰意冷转向其它语言和架构期间,不曾想,他却又遇到其它方面的困扰,如新潮的框架看起来不错,但运行起来确很糟糕。于是他又捡起被外界唱衰的 Rails,那种熟悉的快感随之而来,让他又重新爱上了它。

这难道就是技术人对某种技术的“念旧”或者“偏爱”吗?在你的开发者旅程之中,你是否有过类似的经历呢?

原文链接:https://old.reddit.com/r/rails/comments/17qvwsz/my_thoughts_on_the_rise_and_fall_of_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 分钟的时间,其中大部分时间都是在等待下载/编译的过程中。

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

本文文字及图片出自 CSDN


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK