337

我根据 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
4

27 回答 27

660

检查 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文件夹中没有.ruby-version您可能在文件夹中创建的$ rbenv local <ruby-version>文件$HOME。这样做$ rbenv global <ruby-version>会修改$HOME/.rbenv/version文件,并且.ruby-version文件夹中存在的$HOME文件将覆盖由$HOME/.rbenv/version.

从文档:

选择 Ruby 版本 当你执行一个 shim 时,rbenv 通过从以下源中读取它来确定使用哪个 Ruby 版本,顺序如下:

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

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

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

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

于 2012-08-27T22:40:21.840 回答
135

我通过将以下内容添加到我的来解决此问题~/.bash_profile

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

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

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

于 2013-04-25T13:57:36.317 回答
93

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

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

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

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

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

将其切换到新版本。

于 2013-07-15T23:41:26.460 回答
64

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

$ which ruby

你的系统说:

/usr/bin/ruby

这不是 rbenv 使用的 shim,它(在 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。

注意:重新安装 Rails:

$ gem install rails

如果您尝试运行 Ruby on Rails,那么您需要先让这一切正常运行,然后再次安装 rails gem。之前的 Rails 安装会使用硬编码路径指向错误的 ruby​​,并且其他一些东西会在错误的位置,所以只需重新安装 gem。

PS 如果您的 MacOS 不服从您(* 上面提到的),那么您可能必须找到另一种方法来修改您的路径,但这不太可能成为问题,因为“Mac 可以正常工作”;)

于 2016-08-31T00:29:47.123 回答
28

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

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

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

于 2012-08-18T18:47:39.730 回答
27

在我的情况下,改变~/.zshenv没有奏效。我不得不在里面做出改变~/.zshrc

我刚刚补充说:

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

在顶部~/.zshrc,重新启动 shell 并注销。

检查它是否有效:

➜  ~ 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]
于 2017-02-02T12:55:12.400 回答
17

运行此命令

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

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

这将解决您的问题参考

于 2016-08-31T06:26:51.080 回答
10

我在MacBook Pro Catalina OSMacBook Pro Big 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​​ 版本已经为你设置好了。

就这样。

我希望这有帮助

于 2021-06-24T22:38:57.130 回答
8

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

~/.bash_profile

并添加以下行(如果它不存在)

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

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

~/.zshrc

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

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

于 2019-02-16T18:38:39.053 回答
6

rbenv help shell

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

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

rbenv shell 1.9.3-p125

于 2014-01-26T13:41:53.853 回答
5

跑:

rbenv init

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

rbenv local 2.4.0

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

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

于 2017-08-29T23:52:12.360 回答
5

鱼壳用户

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/
于 2017-01-21T00:27:43.467 回答
5

我有同样的问题,但由 Homebrew 引起:

[~]$ 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. 跑步brew uninstall ruby为我修好了。

于 2017-01-15T12:22:07.463 回答
4

至于我最简单的使用方法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)

之后安装、切换、使用 ruby​​ 版本在rbenv.

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

于 2016-01-07T15:03:41.963 回答
3

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

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

于 2012-11-02T11:46:59.650 回答
3

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

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

于 2012-07-29T11:17:05.567 回答
3

确保你的最后一行.bash_profile是:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
于 2017-04-30T05:37:20.050 回答
3

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

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

这在 OP 引用的 Mac OSX 上不起作用。事实上,如果你通过 安装 rbenv brew install 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

这是什么意思?这意味着当您安装 rubies 时,它们将安装在 .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 
于 2020-03-26T02:40:53.150 回答
2

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

于 2013-12-14T01:19:32.373 回答
1

有很多误导性的答案有效。我认为值得一提的是rbenvREADME中的步骤。

  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>
于 2020-12-26T21:46:15.143 回答
1

Linux / Ubuntu 用户第 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]
于 2020-12-31T10:12:02.137 回答
0

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

于 2014-03-03T06:37:46.960 回答
0

您可以尝试使用chruby吗?chruby 不依赖 shims,而是只修改PATH, GEM_HOME, GEM_PATH.

于 2012-11-21T07:03:22.630 回答
0

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

检查:ls -ltra--> 以查看 arbenv是否已写入。

于 2012-06-21T20:35:24.173 回答
0

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

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

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
于 2020-11-06T19:42:27.060 回答
0

将 eval "$(rbenv init -)" 添加到我的 mac 上的 .bash_profile 解决了这个问题。rbenv local ruby​​ -v 给了集合

于 2021-03-29T18:05:51.460 回答
-2

我建议不要使用 rbenv 有几个问题。

  1. 安装 ruby​​ 后,它不附带捆绑版本
  2. 大多数时候在运行 bundle install 时会创建 bundler 版本拾取问题

为了减少这么多的努力,我建议使用 rvm,让生活更轻松。按照此链接安装 rvm https://nrogap.medium.com/install-rvm-in-macos-step-by-step-d3b3c236953b

于 2021-12-16T13:44:50.157 回答