作者背景
任何一门劝人入坑的文章大家都要注意背景,比如有些 Google 的雇员,因为要推广 Flutter,会把 Flutter 的能力写的花好稻好,然后最近直接团队被裁员,只留下误导新人的一篇篇文章,当然,我也得承认我写的这篇肯定也存在误导,但是我可以发自内心的表示,我至少绝对不是有意为之,我书写本文的目的因为我本身比较喜欢 Ruby 的自由,还有 Rails 的高开发效率。另外从 2012 年全面转向使用 Ruby on Rails 编程以来,它也给了我一份相对不错的工作。
TLDR
- 若您认为计算机语言书写的代码必须带有类型标记,那么本文不适合您,如果您不知道前面一句话啥意思,可以继续阅读;
- 若您认为前后端使用同一种语言可以少学一门语言,并且团队内更容易协作或者相互替换,那么本文不适合您,我推荐 Next.js,请注意,它背后的母公司 Vercel 以卖 deploy/host 为主业,所以以后的应用发布要达到完美状态,您需要在 Deploy 上付出比学习 Rails 更多的努力,另外您需要书写的代码量也会稍微偏多至少 2~3 倍。
- 若您现在急需转码,找工作,那么我推荐 Python,Python 在数据处理/AI 上的工作岗位比 Ruby 要多很多,是您更好的选择,另外友情提示不要学 Java,这个赛道人数已经卷爆了。
- 若您比较注重程序写好后的运行效率(Web 服务需要单机 200 request/s 以上,约等于一个细分赛道的 SaaS 软件提供商所需的正常 Web 请求处理能力的 10 倍左右),那么我推荐 Go,Go 配合 Next.js 是很好的前后端选择。
正文开始
环境准备
有钱上 Mac,直接 brew install ruby,然后安装 rails,没钱用 Ubuntu 的 omakub,当然我也知道用 Linux 的用户绝对不会按照我推荐的 omakub,尽量不要在 windows 上搞 Rails,不是不行,坑太多,实在要搞,用 WSL 和直接用 ubuntu 类似。
快速入门
此快速入门不会导致后期的练功反噬,请放心学习。
请直接阅读官方的guide 最新版本开始,中文的手册版本到 Rails 5.1,还是推荐英语。
官方手册是最快速最正统的导览,后端的功能基本上都提到了,原先可能还需要阅读一下《The Rails Way》,目前是第七版,不过这个是可选。
快速入门阶段最好不要过于扣细节,比如belongs_to
和has_many
是从哪里来的,是方法的话,在哪里定义的之类的框架细节,尽量将 Rails 作为一种 web 应用的定义语言(只是它恰好可以让计算机运行和发布成 web 应用)使用。
官方 Guide 没有提及任何的自动测试内容,这是对的,但是若您接下来就要接手或者开始维护,开发一个真实的 Rails 应用,《Rails Tutorial 6th 6.1.3.p1 中文版本》推荐一读,因为真实的应用多多少少都有一些 TDD 的内容,不过这只是可选。
另外的一个选择是《Agile Web Development with Rails 7.2》,也是半官方的教材,内容更加深入一些,已经不单单是一个入门教材了。
深入 Ruby
当没有完成 Guide 的整个流程前,请不要深入 Ruby 学习,因为这样会不必要的减少您学习 Rails 的时间。
当您开始对诸如1.day.ago
之类的 Rails 调用感到惊奇时,您可以考虑学习一点 Ruby 语言的知识,注意 Ruby 语言语法比 JavaScript 还要复杂,所以不要过于钻牛角尖,《Ruby 基础教程》第四版就是很好的入门。
权威性的 Ruby 教材是《Programming Ruby 3.3 5th》,只有英语版本。
入门后的前端选择
不必深入 Ruby 也可以进行以下任意方向的学习
Rails 主要是一门后端框架,核心是 Active Record,还有一些 MVC 架构的约定,入门的定义是对这些已经掌握了,但是 Rails 毕竟是一种全栈的 Web 开发框架,相比后端,在前端的选择是非常非常多的。
抛去目前被废弃的 rails-ujs,Rails 出场自带的前端框架是 turbo / stimulus,若您没有任何的前端经验,推荐学习这套。
Rails 也同时支持Webpack 集成(顺带也支持了 React/Selte/Angular),Rails 也有Vite/Vue.js的支持。
若您有传统的 JSP/ASP.net MVC 程序员背景,更喜欢比较成熟的框架,Bootstrap 的支持也有现成模版,注意这个模版是笔者维护,并且使用了 coreui.io 的扩展,若您喜欢纯官方的,也可以自行封装。
《Modern Front End Development for Rails 2nd》也有助于对整个 Rails 前端生态有更多了解,但是这已经不是入门内容了。
入门后的 API 支持
Rails 支持 Restful 类型的 API,OpenAPI 3.0 规范 或者 GraphQL。
入门后若要进行 API 书写,推荐直接使用官方的 jbuilder 即可,OpenAPI 3.0 需要学习 grape,GraphQL 需要学习 gem graphql。
入门后的部署选择
传统的 VPS 笔者还是推荐 capistrano,若您对 docker 有偏好,可以使用 kamal 2
进阶
Active Cable 基于实时双向的交互值得学习,想更深入也可以看一下 AnyCable,Bug 较多,但是性能更好。《Advanced CableReady》一书可以阅读
一些高阶的 Postgresql 数据库的特性也值得学习,Active Record 虽然非常强了,但是直接裸写 SQL 有时候更加方便。《High performance Postgresql for Rails》推荐。《Pganalyze Efficient Search in Rails with Postgres》也可以阅读。
代码风格
《Ruby Science》by thoughtbot 可以阅读,不过我还是劝您不要花时间在这里,ruby 是很自由的语言,搞一下 standard 的代码风格检查已经做的有点过了。