如何更改我使用的Ruby版本

时间:2019-03-04 05:21:51

标签: ruby homebrew

我需要运行2.5.3。我使用brew管理我的ruby安装(因为我无法使rvm在我的机器上工作)。当我跑步时

$ruby -v

我明白了

ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

但是,当我尝试使用

更新它时
brew upgrade ruby

我知道

Error: ruby 2.6.1 already installed

为什么我真正安装的红宝石版本如此不一致?

2 个答案:

答案 0 :(得分:3)

您应该使用Ruby版本管理器来管理Ruby的多个版本。我更喜欢使用rbenv。以下是在Mac上安装它的步骤(详细说明了正在执行的操作和原因;如果您想要快捷方式,请尝试依次运行所有命令,但我仍然坚持要求您通读所有步骤)。

rbenv

在继续实际安装之前,请记住以下几点:

  1. rbenv本身不包含安装ruby版本的功能。它仅更改每个目录的ruby版本。要安装红宝石,您需要安装 ruby​​-build 工具(这是rbenv项目的一部分)。 chruby也是如此,它使用另一种工具构建红宝石。
  2. ruby-build必须作为rbenv的插件安装。
  3. 如果您需要详细了解这些工具,请访问rbenvruby-build的链接。
  4. 这两个工具的安装过程(以及许多其他帮助)在项目的README文件中提供。如果事情不适合您,请参考这些内容。

安装rbenv

运行以下命令,将rbenv repo克隆到主目录中的.rbenv目录中。

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

您的系统仍然不知道rbenv在哪里。通过运行以下命令将其添加到您的路径:

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

要初始化rbenv以便在更改目录时可以帮助您更改红宝石,请运行以下命令:

~/.rbenv/bin/rbenv init

这应该告诉您以下信息:

# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

因此运行此:

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

到此,应该安装rbenv。在命令行上运行rbenv时,应该得到如下内容:

$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme

注意:如果收到未安装rbenv的警告,请运行source ~/.bash_profile。这将重新运行~/.bash_profile脚本并在您的路径中获取rbenv。之后,您应该可以顺利运行rbenv

请注意,rbenv尚未提供安装或卸载红宝石的选项。为此,我们需要安装 ruby​​-build

安装ruby-build

我们需要将ruby-build软件包添加为rbenv插件,以便我们可以键入rbenv install <ruby version>来安装rubies。您所需要做的就是创建plugins目录,并在plugins目录中检出Ruby rebuild的git repo。运行以下命令:

$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

测试是否已安装rbenv和ruby-build

在终端上不带任何参数的情况下运行rbenv现在应该显示可用的安装和卸载命令。像这样:

$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   install     Install a Ruby version using ruby-build
   uninstall   Uninstall a specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme

如果看到该输出,则说明rbenv已正确安装。

安装红宝石

要安装ruby 2.5.3,您可以运行(等待,尚未运行):

rbenv install 2.5.3

它应该输出几行,花一些时间,然后告诉您已安装2.5.3版。但是,存在一个问题-如果安装失败,尤其是在编译过程中(有时),则终端卡住,终端上没有输出。它似乎已经安装了很长时间(永远)。要获取有关正在发生的事情的更多信息,请运行以下命令:

rbenv install -f -v 2.5.3

-f参数告诉rbenv强制安装给定的版本。因此,如果已安装,则rbenv将重新安装(基本上覆盖)给定的版本。因此,如果安装失败,-f将确保安装。

-v参数告诉rbenv输出详细消息。因此,ruby-build所做的一切(包括编译过程)都会显示给您。此处不要担心 compilation 一词。无论成功与否,它都能正常编译而不会产生麻烦,并且不会更改您的系统ruby(在Linux上安装sudo apt install ruby或在macOS上默认安装的系统)。

测试安装

安装成功后,您可以运行以下命令来检查安装了哪些版本(下面的代码段中包含输出):

$ rbenv versions
  system
* 2.5.3 (set by /home/ubuntu/.rbenv/version)

注意:在Mac上,新安装的红宝石将具有不同的路径。

前面带有*的那个是当前活动的那个。如果您运行which ruby,则应该获得一条带有红宝石垫片的路径。如果您感到好奇,请阅读rbenv documentation to know what shims are,尽管您不必担心它们。

$ which ruby 
/home/ubuntu/.rbenv/shims/ruby

配置并忘记

rbenv是一件很酷的事情,但是每次都继续写rbenv shell 2.5.3rbenv shell 2.4.5是一个问题。相反,您应该为该目录设置一个ruby版本,而不必理会rbenv。

您可以只创建一个名为.ruby-version的文件,其中包含一行-您要用于此目录(和子目录)中所有ruby脚本的ruby版本号。只需cd到所需目录并运行:

echo "2.5.3" > .ruby-version

该目录和子目录中的所有ruby脚本都将使用2.5.3版。

答案 1 :(得分:0)

我要感谢Vaibhav的翔实回答。我尚未尝试安装rbenv,但我绝对会尝试的。现在,我可以通过不在我的gem文件中指定红宝石版本来解决此问题。这是一个短期解决方法,但确实有效!