更新:
我现在有了一个付费脚本,它可以用一个命令为您设置一个合适的Ruby环境!
我还不断更新在Mac上安装Ruby的免费分步指南(比我更新这个答案的频率还高)。
你是对的,macOS不允许你修改Mac自带的Ruby版本。但是,你可以使用一个单独的Ruby版本来安装gems,比如bundler,这不会影响苹果提供的Ruby版本。
使用sudo来安装gems,或者修改系统文件和目录的权限是非常不鼓励的,即使你知道你在做什么。我们能不能别再提这些馊主意了?我写了一篇详细的文章,说明了为什么不应该使用sudo来安装gems。
解决方案包括两个主要步骤:
安装一个独立的Ruby版本,它不会影响Mac自带的Ruby版本。
更新您的PATH,使新的Ruby版本的位置位于PATH中的第一个位置。有些工具会自动为您执行此操作。如果您不熟悉PATH及其工作方式,那么这是您应该学习的基础知识之一,您将理解为什么有时会遇到“命令未找到”错误以及如何修复它们。
在Mac上安装Ruby有几种方法。我推荐的最好的方法,也是我希望在各种安装说明中更普遍的方法,是使用像Ruby on Mac这样的自动脚本,它会为你设置一个合适的Ruby环境。
主要原因是它为每个人节省了大量的时间。时间是我们最有限也是最宝贵的资源。为什么要让人们手动去做事情,而不是每次都能自动得到完美的结果呢?
另一个原因是,它大大降低了人为错误或由于指令不完整而导致错误的几率。
如果您想手动操作,请继续阅读。首先,您需要安装Homebrew,它将安装必要的命令行工具,并使安装其他必要的工具变得容易。
那么,安装一个独立版本的Ruby的两种最简单的方法是:
如果您想要在多个Ruby版本之间轻松切换的灵活性[推荐]
从以下四个选项中选择一个:
chruby和Ruby -install——这是我个人的建议,也是由Ruby on Mac脚本自动安装的。这些可以用Homebrew安装:
brew install chruby ruby-install
rbenv -可以用Homebrew安装
数位视讯
asdf
如果你选择了chruby和Ruby -install,你可以像这样安装最新的Ruby:
ruby-install ruby
一旦你安装了所有的东西,并根据上面工具的说明配置了.zshrc或.bash_profile,退出并重新启动Terminal,然后切换到你想要的Ruby版本。在chruby的情况下,它会是这样的:
chruby 3.1.3
您是否需要配置.zshrc或.bash_profile取决于您使用的是哪个shell。
如果你确定你不需要同时使用多个版本的Ruby(除了macOS自带的版本)[不推荐]
即使您认为您现在不需要另一个版本,您最终也将无法轻松地切换。这将导致混乱和头痛,这就是为什么我不建议用Homebrew安装和管理Ruby。
如果您不顾我的警告,选择使用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版本。如果安装了不同的版本,请将3.1替换为Ruby版本的前两位数字。
如果你在M1/M2的Mac上,用/opt/homebrew替换/usr/local
然后“刷新”你的shell使这些更改生效:
source ~/.zshrc
或者您可以打开一个新的终端选项卡,或者退出并重新启动终端。
如果使用Bash,请将.zshrc替换为.bash_profile。如果您不确定,请阅读我的指南,了解您正在使用的外壳。
要检查您现在使用的是非系统版本的Ruby,您可以运行以下命令:
which ruby
它不应该是/usr/bin/ruby
ruby -v
它应该是3.1.3或更高版本。
一旦你安装了这个新版本的Ruby,你现在可以安装bundler(或任何其他gem):
gem install bundler