RVM 找不到已安装的新 Ruby 版本(之前使用 Homebrew 安装)

RVM 找不到已安装的新 Ruby 版本(之前使用 Homebrew 安装)

我是个初学者,如果我说了或做了你认为非常愚蠢的事情,请原谅我。我不是故意的。

事情的起因:我想安装 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-installRuby 版本。

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 会出现问题。

相关内容