Skip to content

使用 Homebrew 管理 Ruby

轩辕十四
Published date:

macOS 上的 Ruby 环境管理我相信是大多数软件开发都会遇到的一个问题,如果我们需要同时管理多个 Ruby 版本的话,有 rbenvrvm 的方式,具体的操作网上已有大量的文章供我们学习,本文不再做赘述。今天我们来看一下如何使用 Homebrew 来管理我们的 Ruby。

什么情况下我们可以使用 Homebrew 来管理我们的 Ruby 环境?

在使用之前,首先我们需要知道用 Homebrew 来管理 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 rubyruby -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。

参考文档

Previous
C 语言重拾【六】字符串和字符串函数
Next
代理 Xcode SPM