更新:
您说得对,macOS 不允许您使用 Mac 随附的 Ruby 版本更改任何内容。但是,可以使用不干扰 Apple 提供的单独版本的 Ruby 来安装像 bundler 这样的 gem。
强烈建议不要使用sudo 安装gem,或更改系统文件和目录的权限,即使您知道自己在做什么。我们可以停止提供这种糟糕的建议吗?我写了一篇详细的文章,显示why you should never use sudo to install gems。
解决方案包括两个主要步骤:
- 安装一个单独的 Ruby 版本,该版本不会干扰 Mac 随附的版本。
- 更新您的
PATH,使新Ruby 版本的位置位于PATH 的第一个位置。一些工具会自动为您执行此操作。如果您不熟悉 PATH 及其工作原理,这是您应该学习的基础知识之一,您就会明白为什么有时会出现“command not found”错误以及如何解决这些错误。
有几种方法可以在 Mac 上安装 Ruby。我推荐的最好方法,我希望在各种安装说明中更普遍,是使用自动脚本(就像我在上面编写并链接到的那个),它将为您设置一个适当的 Ruby 环境。这大大减少了由于指令不足而导致错误的机会,这些指令使用户手动执行大量操作并让他们自己找出所有必要的步骤。
您可以采取的另一条路线是花额外的时间手动完成所有事情并希望获得最好的结果。首先,您需要安装Homebrew,它会安装必备的命令行工具,并且可以轻松安装其他必要的工具。
那么,安装单独版本的 Ruby 的两种最简单的方法是:
如果您想要在多个 Ruby 版本之间轻松切换的灵活性 [推荐]
选择以下四个选项之一:
brew install chruby ruby-install
如果您选择了chruby 和ruby-install,那么您可以像这样安装最新的 Ruby:
ruby-install ruby
安装完所有内容并根据上述工具的说明配置.zshrc 或.bash_profile 后,退出并重新启动终端,然后切换到所需的 Ruby 版本。在chruby 的情况下,它会是这样的:
chruby 3.0.1
是否需要配置.zshrc或.bash_profile取决于which shell you are using。
如果您确定自己不需要多个版本的 Ruby(macOS 附带的版本除外)
brew install ruby
然后通过运行以下命令更新您的PATH:
echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"' >> ~/.zshrc
上面命令中的2.7.0 假设 Homebrew 安装了以2.7 开头的 Ruby 版本。如果您使用的是其他版本(可以使用 ruby -v 检查),请将 2.7 替换为您的 Ruby 版本的前两位数。
然后“刷新”您的 shell 以使这些更改生效:
source ~/.zshrc
或者您可以打开一个新的终端选项卡,或者退出并重新启动终端。
如果您使用 Bash,请将 .zshrc 替换为 .bash_profile。如果您不确定,请阅读我的指南以了解 which shell you are using。
要检查您现在使用的是非系统版本的 Ruby,您可以运行以下命令:
which ruby
应该不是/usr/bin/ruby
ruby -v
如果您使用的是 macOS Catalina,它应该不是 2.6.3。截至今天,3.0.1 是最新的 Ruby 版本。
一旦您安装了这个新版本的 Ruby,您现在可以安装 bundler(或任何其他 gem):
gem install bundler