macOS 上的 Ruby 环境管理我相信是大多数软件开发都会遇到的一个问题,如果我们需要同时管理多个 Ruby 版本的话,有 rbenv 和 rvm 的方式,具体的操作网上已有大量的文章供我们学习,本文不再做赘述。今天我们来看一下如何使用 Homebrew 来管理我们的 Ruby。
什么情况下我们可以使用 Homebrew 来管理我们的 Ruby 环境?
- 你只是学习一下 Ruby 语言
- 你只是想编译一个项目(例如我们使用 cocoapods 来管理我们的项目)
在使用之前,首先我们需要知道用 Homebrew 来管理 Ruby 有什么缺点。
- 当你升级其他
Homebrew包时,Homebrew 可能会将 Ruby 更新到新版本 - 你不能非常轻松的在多个 Ruby 版本之间频繁切换
如果你的需求不满足上述描述的话,特别是需要经常切换 Ruby 版本,那么 Homebrew 的方式就不是太适合。
Table of contents
Open Table of contents
macOS 系统的 Ruby
macOS 预装了“系统Ruby”。macOS Monterey 包含 Ruby 2.6.8,这不是最新版本。使用 macOS 系统 Ruby 不是一个好主意(参见:Do Not Use the MacOS System Ruby)。系统 Ruby 的 which ruby 和 ruby -v 如下所示:

我们保留系统 Ruby,使用 Homebrew 来安装最新版 Ruby。
安装 Homebrew
如果你还没安装 Homebrew 的话,请先安装 Homebrew。
安装 Ruby
安装最新版的 Ruby
$ brew install ruby
配置环境
安装完成后,此时我们输入 which ruby 命令发现使用的还是系统 Ruby,因为我们还需要配置一下 $PATH 环境变量。这里使用 zsh 来举例。
我们执行如下命令来编辑我们的 .zshrc 文件。
$ open -e ~/.zshrc
如果安装过 vs code 的话,我们可以使用如下命令来编辑:
$ code ~/.zshrc
在 Intel 芯片的电脑上我们在 zshrc 文件末尾加上如下的配置:
if [ -d "/usr/local/opt/ruby/bin" ]; then
export PATH=/usr/local/opt/ruby/bin:$PATH
export PATH=`gem environment gemdir`/bin:$PATH
fi
在 Apple 芯片的电脑上我们添加下列配置:
if [ -d "/opt/homebrew/opt/ruby/bin" ]; then
export PATH=/opt/homebrew/opt/ruby/bin:$PATH
export PATH=`gem environment gemdir`/bin:$PATH
fi
这会将 Homebrew 安装的 Ruby 设置为比系统 Ruby 有更高的优先级,并添加用于 Ruby gem 的目录。
接下来重新打开终端,以便识别对 .zshrc 的更改。
锁定 Ruby 更新
当您升级其他 Homebrew 包时,Homebrew 可能会将 Ruby 更新到新版本。如果你不想让 Homebrew 的 Ruby 版本被新版本取代,你可以使用
$ brew pin ruby
来阻止对 Ruby 的更新。
确认 Ruby 的安装
$ echo $PATH
# 若输出类似于如下 ruby 配置,则 ruby 环境切换成功
# /opt/homebrew/lib/ruby/gems/3.0.0/bin:/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
在 Apple 芯片上, 你将看到 /opt/homebrew/, 在 Intel 芯片上, 你将看到 /usr/local/。
你可以使用 brew list 命令查看安装了哪些版本的 ruby
$ brew list
==> Formulae
ca-certificates libyaml openssl@1.1 readline ruby
你也可以使用 brew deps --tree --installed 命令查看为 ruby 安装了哪些依赖。
$ brew deps --tree --installed
ca-certificates
libyaml
openssl@1.1
readline
ruby
├── libyaml
├── openssl@1.1
│ └── ca-certificates
└── readline
执行命令 ruby -v 验证是否安装了最新版的 Ruby。
