我是个初学者,如果我说了或做了你认为非常愚蠢的事情,请原谅我。我不是故意的。
事情的起因:我想安装 gem,但是收到以下错误信息:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory
不知何故,我的系统显然仍在使用 MacOS 附带的 Ruby 版本,这会导致此权限错误。它应该使用新安装的版本 2.6.1,这是我使用 Homebrew 安装的。
因此,根据互联网研究,我安装了 rvm,并尝试将 Ruby 2.6.1 设为默认设置:
~rvm --default use 2.6.1
Required ruby-2.6.1 is not installed.
因此 rvm 告诉我 Ruby 2.6.1 未安装。但 homebrew 坚持认为是已安装:
~brew upgrade ruby
Error: ruby 2.6.1 already installed
我应该卸载自制的 Ruby 并通过 rvm 再次安装 Ruby 吗?
答案1
首先,你所说或所做的一切都不会显得愚蠢。我们都曾是初学者。
您的 Mac 无法自动识别 Homebrew 安装的 Ruby 版本,原因是默认情况下,计算机仅在某些目录中查找可执行程序。目录列表以及计算机查找它们的顺序称为PATH
。如果您echo $PATH
在终端中输入,您将看到目录列表,以冒号分隔。默认情况下,在全新安装的 macOS 上,我相信列表如下所示:
/usr/bin:/bin:/usr/sbin:/sbin
在 Homebrew 安装过程中,/usr/local/bin
会创建一个新目录并将其添加到 的开头PATH
。但是,当您使用 Homebrew 安装 Ruby 时,Ruby 会安装在 中/usr/local/opt/ruby/bin
,而不会PATH
自动添加到 中。我知道这一点是因为 Homebrew 在 Ruby 安装结束时提到了这一点。诚然,这条消息对初学者来说可能没什么意义:
If you need to have ruby first in your PATH run:
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
由于您的 中没有 Homebrew 版本的 Ruby PATH
,因此当您输入 时gem install [some gem]
,计算机首先gem
在 中查找调用的程序/usr/local/bin
,但没有找到,然后在 中查找/usr/bin
并找到它,因为那是系统gem
(macOS 自带的 版本gem
)安装的位置。
如果你想知道当前终端会话中正在使用某个程序的哪个版本,你可以使用该which
命令。例如:
which ruby
which gem
这将告诉您计算机首次找到该程序的位置。
您可以使用另一个命令来查看您是否使用了正确的 Ruby 版本:
ruby -v
如果你运行了此命令:
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile
然后打开一个新的终端窗口或选项卡(或运行source ~/.bash_profile
)以使更改生效,Homebrew Ruby 目录将位于您的中的第一个目录PATH
,这意味着您的计算机将首先在那里查找gem
,并且它将使用 Homebrew 版本的 Ruby。
解释一下上面的命令,它将单引号之间的所有内容添加>>
到.bash_profile
用户根目录 ( ~/
) 中。每次打开新的终端窗口或选项卡时,.bash_profile
都会读取并使用其中定义的任何内容。
同样,RVM 无法识别 Homebrew 已安装 Ruby 2.6.1 的原因是因为 RVM 和 Homebrew 在两个彼此不了解的地方安装了 Ruby。首次安装 RVM 时,它安装了版本 2.6.0。我不确定为什么它没有安装 2.6.1,但我确实记得过去使用 RVM 时它不会总是安装最新版本。我个人更喜欢chruby
管理ruby-install
Ruby 版本。
RVM、chruby 和 rbenv 等工具的优点在于,它们允许您在同一台计算机上安装多个版本的 Ruby,并且可以轻松地从一个版本切换到另一个版本。另一方面,Homebrew 一次只能管理一个版本的 Ruby。
答案2
我使用 Homebrew 卸载了 Ruby。brew uninstall ruby
然后尝试使用 RVM 安装 Ruby。rvm install ruby
它给了
Already installed ruby-2.6.0. To reinstall use:
rvm reinstall ruby-2.6.0
所以我选择用 RVM 重新安装它。这最终解决了问题,我能够安装 gems。但是我仍然不确定为什么 Homebrew 安装 Ruby 会出现问题。