rbenv没有改变ruby版本

问题描述 投票:215回答:20

我根据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
ruby rbenv
20个回答
452
投票

检查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。


3
投票

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

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


3
投票

当我遇到这些症状时,问题结果是安装在我试图切换到的新Ruby版本中途失败了,没有我注意到。修复是删除并重新安装它。

(这意味着尽管ruby 1.9.3出现在可用版本的rbenv列表中,但它在rbenv假设它的路径上没有可执行文件。因为rbenv试图通过预先添加一个位置来改变你的ruby版本你的路径,如果它所在的位置实际上没有任何东西,你的操作系统将很乐意继续搜索你的默认路径并找到你的系统版本,在我的情况下就像问题的1.8.7。)


3
投票

至于我使用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版本时没有问题。

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


3
投票

对于鱼壳用户

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

2
投票

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


2
投票

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

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

2
投票

跑:

rbenv init

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

rbenv local 2.4.0

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

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


0
投票

奇怪的是,rbenv版本没有设置.rbenv文件检查:ls -ltra - >看到写了一个rbenv


0
投票

你可以尝试使用chruby? chruby不依赖于垫片,而只是改变了PATHGEM_HOMEGEM_PATH


0
投票

如果您正在使用bash,请转到

~/.bash_profile

并添加以下行(如果它还没有)

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

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

~/.zshrc

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

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


88
投票

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

在上面的许多推荐解决方案之后,我的问题仍然存在。像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

把它切换到新版本。


-1
投票

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


84
投票

我通过在〜/ .bash_profile中添加以下内容来修复此问题:

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

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

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


32
投票

第一步是找出被调用的红宝石: which ruby

你的系统说: /usr/bin/ruby

这不是rbenv使用的垫片,它(在MacOS上)应该是这样的: /Users/<username>/.rbenv/shims/ruby

垫片实际上是一个脚本,其作用类似于重定向到您设置的ruby版本。 rbenv global 1.9.3 rbenv local --unset rbenv shell --unset 我建议您在解决问题时取消设置项目特定的“本地”版本,以及特定于shell的“shell”版本,并使用“全局”版本设置进行测试,该设置在〜/ .rbenv / verion中的纯文本文件中确定。在你的情况下将只是版本号“1.9.3”。您可以在项目文件夹的根目录(而不是主文件夹)中执行“ls -laG”,以确保不再存在“.ruby-version”文件。

您可以使用“rbenv版本”来标识rbenv设置使用的版本(以及设置该文件的文件的位置和名称)。

rbenv versions

没有这个问题:直到你正确设置路径。

使用它来确保您的* MacOS会服从您: eval "$(rbenv init -)"

其次是: which ruby

确保它看起来像:/Users//.rbenv/shims/ruby

然后将该行添加到您的配置文件中,以便每次打开新的终端窗口时它都会运行: ~/.bash_profile eval "$(rbenv init -)"

还有其他方法可以修改路径,可以随意替换它们而不是运行rbenv init。

注意:重新安装Rails: gem install rails

如果您尝试运行Ruby on Rails,那么您需要先将其全部工作,然后再次安装rails gem。以前安装的Rails将使用硬编码路径到错误的ruby,其他几个东西将在错误的位置,所以只需再次安装gem。

P. S.如果您的MacOS不服从您(*如上所述),那么您可能必须找到另一种方法来修改您的路径,但这不太可能是一个问题因为“Macs正常工作”;)


21
投票

我刚刚发现了同样的问题。我做的是卸载rbenv(通过自制程序)并重新安装它。我还补充道

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

当我重新安装rbenv时进入〜/ .bash_profile。现在工作得很好。


11
投票

在我的情况下,改变~/.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]

6
投票

运行此命令

Add rbenv to bash so that it loads every time you open a terminal

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

这将解决你的问题Reference


4
投票

rbenv help shell

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

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

rbenv shell 1.9.3-p125


4
投票

我有同样的问题,但由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的rbenv路径之前。运行brew uninstall ruby为我修复它。

© www.soinside.com 2019 - 2024. All rights reserved.