Using chruby on Mac
1. macOS 自带的 Ruby
目前我的 macOS Ventura 13.6.3 自带的还是 ruby 2.6。同时也要注意 gem 也是自带的,都位于 /usr/bin/.
~ ᐅ where ruby
/usr/bin/ruby
~ ᐅ ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin22]
~ ᐅ where gem
/usr/bin/gem
~ ᐅ gem -v
3.0.3.1
2. Don’t Use System Ruby
尽量不去碰 macOS 自带的 ruby 2.6,这一点很好理解。
但根据 Don’t Use System Ruby 的说法,homebrew install ruby 也算是 system ruby。我个人觉得理由有:
homebrew自身需要 macOS 自带的ruby 2.6,安装新的 ruby 会产生各种 symlink,再加上gem的 symlink,很容易 messyhomebrew安装的 ruby 缺乏一个 explicit 的 environment switching 的动作,以至于有时候你不知道你会使用哪个 ruby
所以我们的 alternative 是 ruby-install:
brew install ruby-install
存在多种 ruby interpreter 可以安装,比如 JRuby (类似 CPython?)。可以通过 ruby-install 命令查看:
~ ᐅ ruby-install
Stable ruby versions:
ruby:
3.0.6
3.1.4
3.2.2
jruby:
9.4.5.0
truffleruby:
23.1.1
truffleruby-graalvm:
23.1.1
mruby:
3.0.0
~ ᐅ ruby-install 3.2.2
3. Ruby Env Management with chruby
Ruby 的 environment management 工具其实还有 RVM, rbenv, frum, asdf (这个名字也太随便了 www 另外它其实可以管理多种语言的 env,比如 Node, Erlang, Elixir, Haskel, Ocaml, PHP, Python, Rust, etc.)
chruby 是非常轻量级的,用法和 pyenv 其实有点像。
3.1 Installation:
brew install chruby
然后需要配置 .zshrc,酌情添加下面两行:
# enable chruby
source /usr/local/share/chruby/chruby.sh
# enable chruby auto-switch (i.e. searching for a .ruby-version file when cd to a directory)
source /usr/local/share/chruby/auto.sh
- 第一句是 enable
chrubyin terminal - 第二句是 enable auto-switch,下面详述
3.2 Manual Switch
假定我们已经通过 ruby-install 安装了 ruby-3.2.2,chruby 就能 list 出这个版本:
~ ᐅ chruby
ruby-3.2.2
我们可以 chruby ruby-3.2.2 切换过去,甚至可以用简写 chruby ruby 或者 chruby 3.2.2,前提是这里 interpreter name ruby 或者 version 3.2.2 能唯一 match 到你现有的某个 env 上。
切换之后,我们可以看到新的 path 和 version:
~ ᐅ chruby
* ruby-3.2.2
~ ᐅ where ruby
/Users/<username>/.rubies/ruby-3.2.2/bin/ruby
/usr/bin/ruby
~ ᐅ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]
~ ᐅ where gem
/Users/<username>/.rubies/ruby-3.2.2/bin/gem
/usr/bin/gem
~ ᐅ gem -v
3.4.10
macOS 自带的 ruby 有个固定名字 system,所以可以再度切换回去:
~ ᐅ chruby system
~ ᐅ ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin22]
3.3 Auto Switch
类似于 pyenv 能识别 .python-version 文件,chruby 也能识别 .ruby-version 文件。假如对某个 directory,你想固定使用 ruby-3.2.2,你可以在这个 directory 下添加一个 .ruby-version 文件并写上 ruby-3.2.2:
echo 'ruby-3.2.2' >> .ruby-version
简写形式应该也是可以的。当你 cd 到这个 directory,chruby 的 auto-switch 功能 detect 到这么一个 .ruby-version 文件后,它就能自动给你 switch 到这个版本。
如果你想每次启动 terminal 都固定 switch 到 ruby-3.2.2,你也可以把 chruby ruby-3.2.2 写到 .zshrc。
留下评论