我回来了,Ruby on Rails
去年,我写了一篇名为 再见,Ruby on Rails 的博文。一年后,在创办了自己的公司之后,我决定回归 Ruby on Rails。我收回之前对 DHH 和 Rails 的声明。
虽然我仍然对 Ruby on Rails 的发展方向有一些担忧,尤其是对 TypeScript 的拒绝,但我仍然相信 Ruby on Rails 是一个很棒的 Web 开发框架,尤其是在快速迭代方面。
如果我想用 TypeScript,我可以在 Rails 中很容易地设置,也许花不到 1 分钟的时间,因为它非常灵活。
中文里有句俗话,“天下武功,唯快不破”。我认为这句话也适用于 Web 开发。Ruby on Rails 仍然是快速迭代的最佳选择。
为什么?让我一一解释。
减少决策疲劳
Ruby on Rails 是一个全栈框架。它有很多内置功能,例如 ActiveRecord、ActionMailer、ActionCable 和 SolidQueue。在开始一个新项目时,你不需要做很多决定。可以遵循约定并完成工作。
在 2024 年,我认为没有任何技术栈拥有最先进的功能,可以决定开发者的成功与失败。最重要的是构建并交付实际产品。Ruby on Rails 仍然是这方面的最佳选择。作为程序员或技术工作者,我们通常有很多想法。我们需要尽快验证它们。因为我们的时间和金钱都是有限的。Ruby on Rails 可以帮助您尽快做到这一点。
如果您将大量精力用于决定使用哪个 Python 或 node.js 包来处理某个领域,例如对象关系映射 (ORM) 或 WebSockets,那将是浪费时间。Ruby on Rails 已经为您做出了这些决定。并且这些“决定”已经过数十万开发人员的测试,并在生产环境中被数十亿用户使用,例如 GitHub、Shopify 和 Basecamp 等公司。
与其他框架(如 Next.js、FastAPI 或 Django)相比,Ruby on Rails 拥有许多内置功能。您不需要做很多决定。您可以遵循约定并完成工作。这对于初创公司或副业项目来说是最重要的。
无聊(稳定)是好事
Ruby on Rails 的 API 一直非常稳定,而不是每年都进行重大更改。这意味着您可以轻松地从大型语言模型或搜索引擎中获得真实的答案,无论您想做什么。
其他框架(如 Next.js)并非如此。他们每年都有重大变化。这意味着您需要花费大量时间升级代码库。这是浪费时间。作为一名拥有超过 10 年经验的 Apple 开发者,我知道每年升级代码库是多么痛苦(而没有为最终用户创造太多价值)。Ruby on Rails 并非如此。您可以专注于您的业务逻辑。
优秀的社区
我一直在大量使用 node.js / Python。但这两个社区并不像 Ruby 社区那样友好。例如,Python 有句名言,“应该有一种——最好只有一种——显而易见的方法来做到这一点。” 这来自 Python 之禅。但实际上,在 Python 中有很多方法可以做同样的事情。
具有讽刺意味的是,Python / node.js 社区总是对哪种方式是最好的有很多争论。Ruby 社区并非如此。虽然您可能会争辩说它不具有包容性,但我认为最好只有一种方法来做到这一点。这可以为初学者节省大量时间。当您有更多资源和时间时,您可以通过将大型 Rails 单体应用重写为其他语言来探索更多方法。
我花了太多时间研究在 Python/Node.js 中执行 X/Y/Z 的最佳实践。只需遵循 Ruby on Rails 中的约定或使用其他出色的 Ruby Gems,我就可以节省大量时间。例如,当涉及到 OAuth 时,如果我们使用 Doorkeeper 和 Rails,所需的工作量要比在 Next.js 中使用 Next-auth 少得多。这通常适用于许多其他事情,例如国际化(有趣的是,Vercel 目前还没把这件事用来变现)、发送电子邮件、处理后台作业等。
没有价格过高的组件
正如 @DHH 在 Rails Wolrd 2023 的主题演讲中提到的(Solid Queue 部分),Ruby on Rails 永远不需要商业组件。 与 Rails 相比,Vercel 在 Nextjs 的 ESLint 规则中为 Vercel 图像优化等内容进行了追加销售(我对此表示尊重)。由于 Next.js 上手困难,很多所谓一站式开发框架,比如 ShipFast 可以卖到好几百美元。但是这没有意义,因为这种框架并不是为了解决问题,而是为了赚钱。《非对称风险》 说的就是这个原理。反向思考一下,如果这些一站式 Next.js 框架可以让人们很容易成功,那么为什么作者还把他的代码拿出来卖钱,而不是自己直接赚钱呢?
Ruby on Rails 的设计宗旨是简单。您无需为任何商业组件付费。您可以使用内置功能并完成工作。
我们已经看到很多开发者抱怨 Vercel 的定价。Ruby on Rails 并非如此。您可以在自己的服务器上使用内置功能并完成工作。您可能会争辩说,许多财富 500 强公司甚至 OpenAI 都在使用 Next.js。好吧,我们不属于这些类别。我们只是一个小型团队。我们至少在创业阶段不需要为商业组件付费。
您可能会发现您的竞争对手正在使用 Next.js 和/或 Vercel。不要惊慌。这是一件好事。正如杰夫·贝佐斯所说,“你的利润是我的机会。” 你绝对有比你的竞争对手更多机会让你的产品更好、更实惠。因为你的竞争对手必须为商业组件付费。您不需要这样做。您可以自行托管几乎所有内容。
一切从简
最近,Basecamp 还创建了 Kamal (https://kamal-deploy.org) 用于部署,您只需一个命令即可部署 Ruby on Rails 应用程序。这是一个很好的简单性示例。您无需花费大量时间配置部署管道或在 Dockerfile
中进行黑客攻击。您可以使用内置功能并完成工作。从零到至少一百万用户,一切都准备就绪。
如果您使用 Next.js 构建产品,Vercel 会将部署过程商业化。如果您花费大量时间配置部署堆栈,那将是浪费时间。例如,对于我们会计产品 SuperBoox 的第一个原型,我们花了两个星期的时间配置部署堆栈,但最终放弃了。因为几乎不可能找到一个好的解决方案来让 node_modules
中的每个依赖项在 Docker 环境中都满意,尤其是在使用像 Drizzle 这样不成熟的 ORM 时,您甚至没有一种简单的方法来运行迁移,而这在 Ruby on Rails 中已经内置多年了。
结论
正如 DHH 所说(在这个播客中),
这就是为什么我曾经真的认为我不会成为一名程序员,因为我对数学问题根本不感兴趣。我对算法的兴趣仅限于它们的实用性。我真正深深喜爱的是 Eric Evans 意义上的领域驱动设计中的主要建模。
我喜欢琢磨业务领域。我喜欢找到恰如其分的词语。我喜欢将主要模型拆解开来等等,所有这些都是逻辑上的、语义上的方法。它不是算法,不是科学,不是数学。
我认为,成为一名全职企业主,您必须非常清楚自己的优先事项。 例如,快速迭代然后将产品推向市场是首要任务吗?还是仅仅依靠最新的技术趋势和框架?我认为前者更重要。Ruby on Rails 仍然是这方面的最佳选择。
我在微软工作多年。我知道每年升级代码库是多么痛苦(尤其是在 Outlook iOS 代码方面)。Ruby on Rails 并非如此。您可以专注于您的业务逻辑。这对于初创公司或副业来说是最重要的。
温斯顿·丘吉尔所说的“完美是进步的敌人”正是我所思考的。 Rails 并非对所有事情都 100% 完美。但我相信它对你的创业公司来说很棒,尤其是你单打独斗的时候。
You could also find this article in English here.
Updated on 2024-08-12:
This blog posted was shared by DHH. If you’d like to join the conversation on X (Twitter):
The best illustration of Rails' value was always trying to replicate the experience in another stack. It's easy to take for granted just how many problems we've solved in twenty years of relentless iteration, and how beautiful the final result can be. Welcome back, Mike ✌️ https://t.co/IbDn79zkcc
— DHH (@dhh) August 3, 2024