RBENV 不更改 Ruby 版本



我根据github的方向安装了rbenv。我正在运行OSX,但我在Ubuntu 12.04 VM上尝试过并得到了相同的结果。以下是我尝试更改 ruby 版本时在终端中得到的内容:

rbenv versions
* 1.9.3-p0 (set by /Users/user/.rbenv/version)
1.9.3-p125
rbenv global
1.9.3-p0
rbenv rehash
ruby -v
ruby 1.8.7 (2011-12-28 patchlevel 357) [universal-darwin11.0]
which ruby
/usr/bin/ruby

任何人都知道为什么 rbenv 没有像它想象的那样切换 ruby 版本?此外,本地目录中没有 .rbenv 文件会导致 ruby 版本默认为 1.8.7

rbenv local
rbenv: no local version configured for this directory

检查 PATH 是否包含$HOME/.rbenv/shims$HOME/.rbenv/bin

$ env | grep PATH

如果使用 bash,还要检查您的 ~/.bash_profile 中是否有以下内容,如果使用 zsh 则检查 ~/.zshenv

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

注意:确保这是 ~/.bash_profile 中的最后一个设置。我遇到了一个问题,我安装了一个更新.bash_profile并重置 PATH 的程序。

最后,请确保您的$HOME文件夹没有在$HOME文件夹中执行$ rbenv local <ruby-version>时可能意外创建的.ruby-version文件。执行$ rbenv global <ruby-version>会修改$HOME/.rbenv/version文件,并且$HOME文件夹中存在.ruby-version文件将覆盖 $HOME/.rbenv/version 设置的版本。

从文档中:

选择 Ruby 版本执行填充程序时,rbenv 通过按以下顺序从以下源读取该填充程序来确定要使用的 Ruby 版本:

RBENV_VERSION环境变量(如果已指定)。您可以使用 rbenv shell 命令在当前 shell 会话中设置此环境变量。

通过搜索正在执行的脚本的目录及其每个父目录直到到达文件系统的根目录找到的第一个 .ruby 版本文件。

通过搜索当前工作目录及其每个父目录直到到达文件系统的根目录找到的第一个 .ruby 版本文件。您可以使用 rbenv 本地命令修改当前工作目录中的 .ruby 版本文件。

全局 ~/.rbenv/version 文件。您可以使用 rbenv 全局命令修改此文件。如果全局版本文件不存在,rbenv 假定你想使用"系统"Ruby——即如果 rbenv 不在你的路径中,将运行任何版本。

我通过在~/.bash_profile中添加以下内容来解决此问题:

#PATH for rbenv
export PATH="$HOME/.rbenv/shims:$PATH"

这是 https://github.com/sstephenson/rbenv 记录的内容。

据我所知,没有~/.rbenv/bin目录,这是@rodowi在帖子中提到的。

这可能是一个老问题,但谷歌把我带到了这里,为了后代的缘故,我想我会分享。

在上述许多推荐的解决方案之后,我的问题仍然存在。像OP一样,我安装了rbenv,然后是Ruby版本,但我的笔记本电脑默认为系统。我忽略的是,当我跑步时:

[~/.rbenv] $ rbenv versions
* system (set by /Users/alphadogg/.rbenv/version)
  2.0.0-p247

IOW,它仍然默认为系统。一个快速

[~/.rbenv] $ rbenv local 2.0.0-p247

将其切换到新版本。

第一步是找出哪个 ruby 被调用:

$ which ruby

您的系统显示:

/usr/bin/ruby

这不是 rbenv 使用的填充程序,它(在 MacOS 上)应该看起来像:

/Users/<username>/.rbenv/shims/ruby

填充程序实际上是一个脚本,其作用类似于重定向到您设置的 ruby 版本。

为了进行故障排除,我建议您取消设置项目特定的"本地"版本和特定于 shell 的"shell"版本,然后使用"全局"版本设置进行测试,该设置在 ~/.rbenv/version 中的纯文本文件中确定,在您的情况下,这只是版本号"1.9.3"。

$ rbenv global 1.9.3
$ rbenv local --unset
$ rbenv shell --unset

您可以在项目文件夹(而不是主文件夹)的根目录中执行ls -laG,以确保那里不再有".ruby-version"文件。

您可以使用rbenv versions来标识 rbenv 设置为使用哪个版本(以及设置该版本的文件的位置和名称):

$ rbenv versions

在正确设置路径之前,这些都不重要。

使用它来确保您的 *MacOS 会服从您:

$ rbenv init -

其次:

$ which ruby

要确保它看起来像:

/Users/<username>/.rbenv/shims/ruby

然后运行以下命令以将该行添加到您的个人资料中,以便每次打开新的终端窗口时它都会运行:

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

还有其他方法可以修改路径,随意替换其中任何一个,而不是运行 rbenv init。

注:重新安装导轨:

$ gem install rails

如果你试图运行Ruby on Rails,那么你需要先让这一切工作,然后再次安装rails gem。 以前安装的 Rails 将使用硬编码路径指向错误的 ruby,而其他一些东西将位于错误的位置,因此只需再次安装 gem 即可。

附言如果你的MacOS不服从你(*上面提到),那么你可能不得不找到另一种方法来修改你的路径,但这不太可能是一个问题,因为"Mac只是工作";)

MacBook Pro Catalina OS和MacBook ProBig Sur上使用rbenv设置Ruby时,我遇到了这个问题。

这是我修复的方法:

首先运行以下命令来初始化 rbenv:

rbenv init

这将为您提供一些操作说明。 基本上,您必须打开~/.zshrc文件并将其添加到文件eval "$(rbenv init -)"。您可以通过运行以下命令来完成此操作:

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

接下来,运行以下命令来设置 Ruby 版本:

rbenv local <your-desired-ruby-version>

就我而言,我想要的 Ruby 版本是 3.0.1,所以它是:

rbenv local 3.0.1

完成后,使用 Command + Q 退出终端,然后打开一个新终端,这次运行命令时:

ruby -v 
rbenv versions

您将看到所需的 Ruby 版本已经为您设置好了。

在我的情况下,更改~/.zshenv不起作用。我必须在~/.zshrc内部进行更改。

我刚刚补充说:

# Include rbenv for ZSH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

~/.zshrc 的顶部,重新启动外壳并注销。

检查它是否有效:

➜  ~ rbenv install 2.4.0
➜  ~ rbenv global 2.4.0
➜  ~ rbenv global
2.4.0
➜  ~ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]

我刚刚发现了同样的问题。我所做的是卸载rbenv(通过自制软件)并重新安装它。我还添加了

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

当我重新安装 rbenv 时进入 ~/.bash_profile。现在工作完美。

运行此命令

将 rbenv 添加到 bash 中,以便每次打开终端时加载它

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile

这将解决您的问题参考

更新 2023 (Macbook Ventura+)

即使您已安装rbenv,您的计算机仍然可以提供默认的 ruby 版本。要解决此问题,只需运行以下命令:

rbenv init

这可能会给出如下输出:

# Load rbenv automatically by appending
# the following to ~/.zshrc:
eval "$(rbenv init - zsh)"

只需打开您的.zshrc文件:

sudo nano ~/.zshrc

(或者您也可以使用任何其他文本编辑器打开此文件)

添加此行:

eval "$(rbenv init - zsh)"

保存文件(如果使用sudo nano,您可以这样做:) CTRL + X然后Y然后Enter(适用于Mac)

现在,像这样刷新您的.zshrc配置文件:

source ~/.zshrc

现在键入 ruby --version ,这必须为您提供 rbenv 提供的 ruby 版本。

如果您使用的是 bash,请转到

~/.bash_profile

并添加以下行(如果尚未存在)

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

如果您使用的是 Zsh,请转到

~/.zshrc

并在 .zshrc 文件的末尾添加相同的代码行。

然后只需重新启动终端,现在应该没问题。

rbenv help shell

"通过在 shell 中设置'RBENV_VERSION'环境变量来设置特定于 shell 的 Ruby 版本。此版本将覆盖特定于本地应用程序的版本和全局版本。应该是与 rbenv 已知的 Ruby 版本匹配的字符串。特殊版本字符串"system"将使用您的默认系统 Ruby。运行 rbenv 版本以获取可用 Ruby 版本的列表。

如果 rbenv 安装正确,ruby -v 将对应于

rbenv shell 1.9.3-p125

我遇到了同样的问题,但由自制软件引起:

[~]$ rbenv version
2.3.0 (set by /Users/user/.rbenv/version)
[~]$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
[~]$ which ruby
/usr/local/bin/ruby

不知何故,我也通过Homebrew安装了Ruby,并且Homebrew路径在我的$PATH中领先于rbenv路径。跑步brew uninstall ruby为我修复了它。

运行:

rbenv init

运行后,当我设置本地 rbenv 版本时:

rbenv local 2.4.0

然后我的ruby -v和我的rbenv local版本重合。

注意:您可能还想退出您所在的目录,然后返回该目录,我注意到这对我来说是必要的,以便使事情正常工作。

我尝试了所有解决方案,但没有任何效果。甚至我也在.zshrc文件中包含了路径。

就我而言,我正在将MacBook Pro M2与macOS Ventura 13.2一起使用。我正在使用React Native 0.71.2,它需要Ruby 2.7.6版本。

我只是将以下代码放在.zprofile而不是.zshrc中,并且它起作用了:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
用于

鱼壳用户

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/

对我来说,将rbenvzsh一起使用的最简单方法是将rbenv添加到.zshrc配置中的插件部分。就我而言,它看起来类似于:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git bower rails ruby rbenv gulp npm node nvm sublime)

之后,在rbenv的帮助下安装,切换,使用Ruby版本时没有问题。

请注意在进行更改后重新启动终端会话。

接受的答案建议添加以下内容:

export PATH="$HOME/.rbenv/bin:$PATH"

这在OP引用的Mac OSX上不起作用。事实上,如果你通过 brew install rbenv 安装 rbenv ,这实际上是 Mac OSX 中唯一的安装方法,因为curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash在 OSX 中会失败,那么 rbenv 可执行文件将安装在:

$ which rbenv
/usr/local/bin/rbenv

但是,即使在 OSX 中,rbenv 根目录也会保留在$HOME目录中:

~ viggy$ rbenv root
/Users/viggy/.rbenv

这是什么意思?这意味着当您安装红宝石时,它们将安装在 .rbenv 下的给定主目录中:

$ rbenv install 2.6.0
$ ls ~/.rbenv/versions
2.6.0

现在brew安装做了一些你必须在Linux中手动执行的工作。例如,在 Linux 中,您必须手动安装 ruby-build 作为插件:

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

这已经在自制软件安装中完成。在自制软件安装中必须完成一个重要步骤,就像在 Linux 安装中一样。必须将 rbenv 填充程序添加到路径中。为此,当您的 shell 启动时,您必须评估以下命令(该命令又会将 rbenv 填充程序添加到$PATH的开头):

$ vim ~/.bash_profile
eval "$(rbenv init -)"
$ source ~/.bash_profile

现在,当您运行 echo $PATH 时,您将看到 rbenv 填充码:

$ echo $PATH
/Users/viggy/.rbenv/shims:

现在检查您的 ruby 版本,它将反映已安装的 rbenv ruby:

ruby -v
ruby 2.6.0p0 

将以下内容添加到.bashrc对我有用 -

export PATH="$HOME/.rbenv/shims:$PATH"

当我出现这些症状时,问题原来是我试图切换到的新 Ruby 版本的安装中途失败,而我没有注意到。修复是删除并重新安装它。

(这意味着即使 ruby 1.9.3 出现在 rbenv 可用版本列表中,它在 rbenv 假设的路径上也没有可执行文件。由于 rbenv 试图更改您的 ruby 版本,只需在您的路径前面加上一个位置,如果它前面的位置实际上没有任何内容,您的操作系统将很乐意继续搜索您的默认路径并找到您的系统版本,在我的情况下,就像问题的 1.8.7。

确保.bash_profile的最后一行是:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

我遇到了同样的问题。通过使用 sudo 运行 rbenv global 命令来解决此问题。我认为这是权限问题。

更新:我终于找到了解决方案。我的Mac上有一个相同的文件"版本",它在/usr/local/Cellar/rbenv/0.3.0/下。我认为它是偶尔错误创建的。您应该删除它。

发生在我重新安装rbenv后。显然,我的主目录中有一个.ruby-version文件,指定了一个不再存在的版本。删除文件后,一切正常。

有很多误导性的答案是有效的。我认为值得一提的是rbenv自述文件中的步骤。

  1. $ brew install rbenv
  2. $ rbenv init并按照它为您提供的说明进行操作。这就是我得到的:
~ $ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:
eval "$(rbenv init -)"

我更新了我的~/.bash_profile...

  1. 关闭终端并再次打开
  2. 通过运行以下命令验证它是否正常工作:
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
  1. 现在只需通过执行以下操作安装所需的版本:rbenv install <version>

Linux/Ubuntu Users第 1 步:

$ rbenv versions
  system
  2.6.0
* 2.7.0 (set by /home/User/Documents/sample-app/.ruby-version) #Yours will be different
  2.7.2

第 2 步:

$ nano /home/User/Documents/sample-app/.ruby-version

第 3 步:

$ ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]

你可以尝试使用chruby吗? Chruby不依赖填充码,而是只修改PATHGEM_HOMEGEM_PATH

在安装 rbenv 之前我忘了删除 rvm。我删除了 rvm 并重新安装了 rbenv,但系统仍然没有使用 rbenv 指定为全局的 Ruby 版本。我尝试关闭终端,但只有在重新启动整台机器后它才起作用。

这里的所有其他答案都为各种情况提供了很好的建议,但有一种更简单的方法。

rbenv 文档将我们指向 rbenv 医生诊断工具,该工具将快速验证系统上的所有这些潜在陷阱:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

一切正常后,您将看到以下内容:

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash                                     <aws:hd-pmp-developer>
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/bin/rbenv-install (ruby-build 20201005)
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

现在,如果我们打破了其中一个期望(例如删除 rbenv-install),该工具将直接向我们指出问题,并提供如何修复它的链接:

$ mv /usr/local/bin/rbenv-install rbenv-install-GONE
                                                                      
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash                                     
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
===> Checking `rbenv install' support: not found <===
  Unless you plan to add Ruby versions manually, you should install ruby-build.
  Please refer to https://github.com/rbenv/ruby-build#installation
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

奇怪的是,rbenv版本没有设置.rbenv文件。

检查:ls -ltra -->以查看是否编写了rbenv

将 eval "$(rbenv init -)" 添加到我 Mac 上的.bash_profile解决了这个问题。RBENV Local红宝石-V给出了套装

如何安装 RUBY RBENV就像许多其他工具一样,我们转向流行的自制macOS包管理器。在终端中运行以下命令:

brew install rbenv ruby-build

安装完所有内容后,我们需要指示 rbenv 设置我们的 shell,因此每当我们打开新的终端窗口在提示符中键入命令时,我们都使用 rbenv 自定义安装的 Ruby 运行时版本(而不是 macOS 上预安装的 Ruby 2.6.8 版本)。

要使用 shell 设置 rbenv,请运行以下命令:

rbenv init

如果您需要任何额外的配置,请按照屏幕上打印的说明进行操作。系统可能会要求您在 shell 的配置中粘贴命令。如果您使用的是macOS并且没有从默认的Z Shell(ZSH)更改,那么您需要确保将以下代码行添加到~/.zshrc文件的顶部:

eval "$(rbenv init - zsh)"

rbenv 安装过程现已完成。您可能需要运行一些诊断检查以确保正确设置所有内容。如果是这样,您可以运行 rbenv GitHub 项目提供的 rbenv-doctor 工具:

打开一个新的终端窗口,以便加载新的 rbenv 环境运行命令:卷曲 -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor |中兴警告:此命令不应掉以轻心,因为您要将源自公共和开源 GitHub 存储库的开发环境的 shell 中的命令管道化。恶意参与者可能篡改了源代码,因此强烈建议您在运行此命令之前正确查看代码。

如何使用 rbenv 安装新的 Ruby 版本?恭喜你构建了自己的 Ruby 虚拟环境!现在你已经有一个功能性的 rbenv 设置,我们可以用它来完全管理你的 Ruby 版本。

首先,您需要列出哪些 Ruby 版本可供安装,以便您可以选择最新的 Ruby 版本,或者您正在寻找的特定版本。要使用 rbenv 列出所有 Ruby 版本,请运行以下命令:

rbenv install -l

其输出为:

2.6.102.7.63.0.43.1.2JRUBY-9.3.6.0鲁比-3.1.0皮克红宝石-3.0.0RBX-5.0松露红宝石-22.1.0松露红宝石+GRALVM-22.1.0

仅显示每个 Ruby 实现的最新稳定版本。使用 'rbenv install --list-all/-L' 显示所有本地版本。然后,您可以继续安装这些 Ruby 版本之一。让我们使用 rbenv 来安装 Ruby 版本的 3.1.2:

rbenv install 3.1.2
然后,

该命令将开始获取相关的源代码文件,以提取、编译,然后安装适用于您的 shell 的 Ruby 3.1.2 运行时版本。

安装完成后,您应该在 shell 启动时将其设置为所选版本。为此,您需要运行:

rbenv global 3.1.2

最后,您可以通过在 shell 中运行 ruby --version 来验证这是否按预期工作,这应该输出类似的结果:

最新更新