大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
Ruby 环境
这一课你将能做到
- 在本机安装 Ruby 3.x 并用
ruby -v验证版本 - 用
irb交互式控制台运行 Ruby 表达式,并写出第一个.rb脚本文件执行 - 说清楚 rbenv 与 RVM 的区别,能配置 VS Code 的 Ruby 开发环境
为什么要学
环境是所有后续学习的地基。Ruby 版本之间差异很大——Rails 7 要求 Ruby 2.7+,而 macOS 系统自带的往往是老旧的 Ruby 2.6。不会管理版本,你装个 gem 都能报权限错误。
人话:Ruby 环境就像厨房的灶台。rbenv 是你的「多灶台控制器」,让你同时装好几个 Ruby 版本、每个项目用不同版本,互不打架。灶台搭不好,后面的菜(Rails、Gem 开发)一道都做不出来。
先建立图像
你的代码
│
▼
┌─────────────┐ ┌──────────────┐
│ 版本管理器 │────▶│ ruby 解释器 │─── ruby -v / irb / ruby hello.rb
│ rbenv / RVM │ │ (MRI/CRuby) │
└─────────────┘ └──────────────┘
│ │
▼ ▼
~/.rbenv/versions/ rubygems (gem 命令)
3.3.5 3.2.4 2.7.8 bundler (bundle 命令)
| 工具 | 干什么的 | 类比 |
|---|---|---|
| ruby | 解释器本体,执行 .rb 文件 | JDK 的 java 命令 |
| irb | 交互式控制台,边敲边看结果 | jshell / Python REPL |
| gem | 包管理器,装第三方库 | Maven 中央仓库客户端 |
| rbenv | 版本切换器,管理多个 ruby | jenv / nvm |
| bundler | 项目级依赖锁定 | pom.xml + mvn |
跟着做
步骤 1:安装 Ruby
Windows 用 RubyInstaller(官网下载 rubyinstaller-devkit 版,安装时勾选 MSYS2);macOS 用 Homebrew:
# macOS
brew install rbenv ruby-build
rbenv init # 按输出把一行 eval 加进 ~/.zshrc
rbenv install 3.3.5
rbenv global 3.3.5
# Ubuntu/Debian
sudo apt install rbenv
rbenv install 3.3.5
装完验证(三个命令都要有正常输出):
ruby -v # => ruby 3.3.5 (2024-09-03 revision ...) [x86_64-...]
gem -v # => 3.5.x
irb -v # => irb 1.14.x
步骤 2:用 irb 玩 5 分钟
终端输入 irb,进入交互控制台,逐行敲:
1 + 2
"hello".upcase
5.times { print "Ruby! " }
exit
每敲一行回车,irb 立刻打印 => 开头的返回值。这是 Ruby 学习最重要的工具——不确定的语法,先扔 irb 里试。
步骤 3:写第一个脚本文件
新建 hello.rb:
name = "Ruby"
version = 3.3
puts "你好,#{name} #{version}!"
puts "1 到 5 的和是 #{(1..5).sum}"
3.times do |i|
puts "第 #{i + 1} 次循环"
end
执行:
ruby hello.rb
输出:
你好,Ruby 3.3!
1 到 5 的和是 15
第 1 次循环
第 2 次循环
第 3 次循环
步骤 4:配 VS Code
装两个扩展:Ruby LSP(Shopify 官方,补全/跳转/悬停文档)和 VSCode Ruby(语法高亮)。设置里开启 format on save,formatter 选 Ruby LSP。之后写代码就有和 IDEA 写 Java 类似的体验。
讲清楚要点
- rbenv vs RVM:rbenv 通过 PATH 前置 shim 目录切换版本,轻、不污染 shell 函数,是目前主流;RVM 直接改写 shell 的
cd行为,功能全但侵入性强。新项目选 rbenv(或更新的 mise)。 - 系统 Ruby 不要动:macOS 自带的
/usr/bin/ruby是给系统脚本用的,权限受限且版本旧。所有开发都走 rbenv 装的版本。 - irb 就是探针:Ruby 社区调试的第一反应不是开调试器,而是 irb(或 pry)里现场试。养成「不确定就 irb」的习惯。
- 脚本执行方式:
ruby 文件名.rb是唯一推荐方式。加 shebang(#!/usr/bin/env ruby)+chmod +x后可以直接./hello.rb,但仅限 macOS/Linux。 .ruby-version文件:项目根目录放一个只写版本号(如3.3.5)的文件,rbenv 进入目录会自动切换版本——团队协作必配。
你可能会懵的地方
-
irb里的=>是什么? 它打印的是表达式的「返回值」,不是输出。puts "hi"先打印 hi(副作用),再显示=> nil(puts 的返回值永远是 nil)。 -
rbenv 装了新版本,为什么
ruby -v还是旧的? 九成是 shim 没生效:执行rbenv rehash,并确认rbenv init输出的 eval 行确实在 shell 配置文件里且已重开终端。 -
Windows 上没有 rbenv 怎么办? Windows 直接用 RubyInstaller 的 uru 或 Pik 做版本管理,或者干脆只装一个版本。生产部署几乎都在 Linux,Windows 只做开发。
-
gem 装包装到一半报权限错误(Gem::FilePermissionError)? 你在往系统 Ruby 里装。检查
which ruby是否指向 rbenv 目录;永远不要sudo gem install。 -
JRuby、TruffleRuby 是什么?要学吗? 它们是跑在 JVM 或 GraalVM 上的 Ruby 实现,默认学的「Ruby」指官方 MRI/CRuby。初学者只用 MRI。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| 用系统自带 Ruby 开发 | 版本旧、装 gem 要 sudo | rbenv 装 3.x,shim 接管 PATH |
sudo gem install rails | 污染系统目录,后患无穷 | 切到 rbenv 版本后直接 gem install |
| 把代码写进 irb 不保存 | 退出即丢失 | irb 只用于试验,正式代码写 .rb 文件 |
ruby hello 漏写扩展名 | 报 cannot load such file | ruby hello.rb 带上 .rb |
| 项目间共用一个 Ruby 大版本不管小版本 | 「我机器上是好的」 | 项目根放 .ruby-version 锁版本 |
卡点急救
ruby: command not found:PATH 没配。检查 shell 配置文件(~/.zshrc 或 ~/.bashrc)里有没有 rbenv 的 init 行,重开终端。- irb 里粘贴多行代码格式全乱:Ruby 3.x 的 irb 已原生支持多行粘贴,老版本可先
irb --nomultiline,或直接改用文件执行。 - Windows 安装后
gem install卡 SSL 证书错误:重跑 RubyInstaller 安装目录下的ridk install,选 1+2+3 补全 MSYS2 工具链。
面试常问
-
MRI、JRuby、TruffleRuby 区别? MRI(也叫 CRuby)是松本行弘写的官方 C 实现,有 GIL;JRuby 跑在 JVM 上,能用 Java 生态、无真 GIL 限制;TruffleRuby 基于 GraalVM,JIT 峰值性能最高。生产 95% 是 MRI。
-
Ruby 是解释型还是编译型? MRI 1.9+ 是「编译成字节码再由 VM 执行」,和 JVM 思路类似但没有独立 .class 文件,且 3.x 带 YJIT 即时编译器。面试标准答案:字节码解释 + JIT 混合。
-
rbenv 的 shim 原理? shim 是 ~/.rbenv/shims 下的一组同名轻量脚本,PATH 里它排在最前。调用 ruby 时 shim 读取 .ruby-version / RBENV_VERSION 决定转发到哪个真实版本。
自测三问
ruby -v、irb、gem list三个命令分别验证什么?- 为什么不应该往系统 Ruby 里装 gem?
- 新克隆一个项目,如何 10 秒内知道它要求哪个 Ruby 版本?
小结一句话
用 rbenv 管住版本、irb 当试验田、.rb 文件跑脚本,Ruby 环境这关就过了。
延伸
- Ruby 官方安装指南
- rbenv 官方仓库
- 下一课:数据类型——Symbol、Array、Hash 这些 Ruby 日常操作的主角。