我根据github的说明安装了rbenv。我正在运行OSX,但我已经在Ubuntu 12.04虚拟机上尝试了这一点,并得到了相同的结果。下面是当我尝试更改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

当前回答

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

其他回答

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

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

将以下内容添加到.bashrc对我来说是有效的-

导出路径= " $ HOME / .rbenv /垫片:美元路径”

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

$ which ruby

你的系统会说:

/usr/bin/ruby

这不是rbenv使用的垫片,它(在MacOS上)应该看起来像:

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

shim实际上是一个脚本,它的作用类似于重定向到您设置的ruby版本。

为了解决问题,我建议您取消特定于项目的“本地”版本,以及特定于shell的“shell”版本,并使用在~/纯文本文件中确定的“全局”版本设置进行测试。Rbenv /version,在你的例子中,它只是版本号“1.9.3”。

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

你可以在你的项目文件夹(不是主文件夹)的根目录下执行ls -laG,以确保那里不再有“。ruby-version”文件。

您可以使用rbenv版本来确定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

如果您试图在Rails上运行Ruby,那么您需要首先让这些都正常工作,然后再次安装Rails gem。以前安装的Rails会使用硬编码路径到错误的ruby,其他一些东西也会在错误的位置,所以只需重新安装gem。

附注:如果你的MacOS不服从你(*上面提到过),那么你可能必须找到另一种方法来修改你的路径,但这不太可能是一个问题,因为“mac只是工作”;)

对我来说,使用rbenv和zsh最简单的方法是将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版本都没有问题。

注意在做出更改后重新启动终端会话。

执行此命令

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

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

这将解决你的问题