【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 責編 | 夢依丹
在 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 分鐘的時間,其中大部分時間都是在等待下載/編譯的過程中。
對此,有網友評論道:在老的版本上可能會比較困難,需要進行一些手動配置等。