为什么我的Ruby版本不同意?

时间:2015-10-31 13:01:14

标签: ruby homebrew travis-ci

我本身不是Ruby用户,但是在我的系统上有它,因为我使用它(到目前为止)只有两件事(我知道):

我想保持这两个当前,但我很困惑,我正在使用什么版本的Ruby。

当我问Homebrew时,我得到了:

$ brew --config
#...
Homebrew Ruby: 2.0.0-p648
#...
Ruby: /usr/local/bin/ruby => /usr/local/Cellar/ruby/2.4.1_1/bin/ruby
#...

但当我问我的系统时,我得到了:

$ which -a ruby
/usr/local/bin/ruby
/usr/bin/ruby

$ /usr/local/bin/ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

$ /usr/bin/ruby --version
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]

$ ruby --version
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

为什么Homebrew看到的“系统”Ruby不同意我的系统在提示符下使用的版本?如何让所有这些保持最新状态?具体来说,我该如何保持最新

  1. Homebrew使用的Ruby版本
  2. 提示时使用的版本,
  3. 我的Travis CI工具(以及它使用的Ruby版本)?

1 个答案:

答案 0 :(得分:1)

可以在系统上安装多个语言实例。默认情况下,{/ 1}}可执行文件将在/ usr / bin / ruby​​中找到。该版本将由系统安装的以Ruby为中心的脚本使用。我们可以使用它,但我们不应该更改/更新/删除它,因为这些工具会破坏,可能会产生惊人的效果。

如果用户决定安装另一个版本,也许是因为它更新,并且它的使用,而不是系统的版本,它会进入/ usr / local / bin目录/红宝石。 "本地"意味着"本地"用户的使用,而不是系统的使用。

我们的PATH环境变量定义了查找内容的搜索路径。通常它会有" / usr / local / bin:/ usr / bin"这样OS就会在" local"可执行文件的存储库,然后查看"系统"库。这允许我们在需要时添加覆盖命令,再次将它们放在/ usr / local / bin目录中。需要原件的工具仍然知道查看/ usr / bin。

这样做的缺点是我们只能拥有两个版本的ruby。为了解决这个问题,我们最终将版本号(例如rubyruby193)添加到/ usr / local / bin中的多个实例,然后编写指向ruby2.2行的脚本适当的版本。但是,我们不可避免地搞砸了,输错了" ruby​​"并打破了一些东西。

因此,一些有进取心,非常聪明的人发现我们可以操纵我们的PATH设置,将我们的Rubies存储在不同的位置,通常是我们的主目录,然后编写可以管理我们想要使用的版本的代码。 RVMrbenv是Ruby世界中常用的两种工具来处理这个问题。我使用过它们并且效果非常好。

我建议删除Homebrew安装的Ruby实例,安装RVM或rbenv,然后允许"沙箱管理器"处理你的红宝石。您的系统Ruby需要保持原样,因为您可能希望避免发现它是神圣不可侵犯的。