你说得对,macOS不允许你更改与Mac预装的Ruby版本有关的任何内容。但是,可以使用不干扰Apple提供的版本的单独Ruby版本来安装像bundler
这样的gem。
强烈不建议使用sudo
安装gems或更改系统文件和目录的权限,即使你知道自己在做什么。我们能否停止提供这种错误的建议?
解决方案包括两个主要步骤:
- 安装一个不会干扰Mac预装版本的单独Ruby版本。
- 更新你的
PATH
,使新的Ruby版本的位置在PATH
中首先出现。一些工具会自动为你完成此操作。如果你不熟悉PATH
及其工作原理,那么这是你应该学习的基础之一,你将了解为什么有时会出现“命令未找到”错误以及如何修复它们。
首先,你需要安装Homebrew,它会安装必备的命令行工具,并使安装其他必要工具变得容易。
那么,安装单独版本的Ruby的两种最简单的方法是:
如果您想要轻松切换多个Ruby版本 [推荐使用]
选择以下四个选项之一:
brew install chruby ruby-install
如果您选择了chruby
和ruby-install
,则可以按照以下方式安装最新的Ruby:
ruby-install ruby
一旦您安装了所有内容并根据上述工具的说明配置了您的.zshrc
或.bash_profile
,请退出并重新启动终端,然后切换到您想要的Ruby版本。对于chruby
,操作如下:
chruby 3.1.3
无论您需要配置
.zshrc
还是
.bash_profile
取决于您使用哪个 shell。
如果您确定不需要同时使用多个 Ruby 版本(除了 macOS 自带的版本)[不建议]
即使您现在认为您不需要另一个版本,但最终您将需要,并且您将无法轻松切换。这会导致混乱和头痛,这就是为什么我不建议使用 Homebrew 安装和管理 Ruby。
如果您选择忽略我的警告使用 Homebrew 安装 Ruby,则遇到任何问题将自行解决。
brew install ruby
然后通过运行以下命令更新您的PATH
:
echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/3.1.0/bin:$PATH"' >> ~/.zshrc
上述命令中的3.1.0
假定Homebrew安装了以3.1
开头的Ruby版本。如果安装了不同的版本,请用您的Ruby版本的前两位数字替换3.1
。
如果您使用的是M1/M2 Mac,请将/usr/local
替换为/opt/homebrew
然后“刷新”您的shell以使这些更改生效:
source ~/.zshrc
或者您可以打开一个新的终端选项卡,或退出并重新启动终端。
如果您使用的是Bash,请将.zshrc
替换为.bash_profile
。如果您不确定,请阅读我的指南以找出您正在使用哪个shell。
要检查您现在是否正在使用非系统版本的Ruby,您可以运行以下命令:
which ruby
它不应该是/usr/bin/ruby
ruby -v
应该是3.1.3或更高版本。
安装了这个新版本的Ruby之后,你现在可以安装bundler(或任何其他gem)了。
gem install bundler
sudo chown -R $USER /Library/Ruby/Gems/
。 - Faiz Fareedrbenv global 3.1.2
,然后它就能工作了。 - Sangam