rbenv不更改Ruby版本


268

我根据github的指示安装了rbenv。我正在运行OSX,但是我已经在Ubuntu 12.04 VM上进行了尝试,并得到了相同的结果。以下是我尝试更改红宝石版本时在终端中得到的内容:

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

您是否已将init正确正确地放入了bashrc中?您的$ PATH是什么样的?
d11wtq 2012年

这些命令均未更改rbenv使用的Ruby版本,但似乎未使用您的默认Ruby。
Andrew Marshall

@ d11wtq是正确的。它显然不是在我的〜/ .bash_profile中。
ajorgensen 2012年

Answers:


518

检查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可能偶然创建的文件。执行$ HOME / .rbenv / version .ruby-version $ HOME $ HOME / .rbenv / version`。$ rbenv local <ruby-version>$HOME$ rbenv global <ruby-version>' modifies thefile, and the existence of afile in thefolder would override the version set by

从文档:

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

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

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

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

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


34
在OSX上,不要忘记注销OSX会话,然后重新登录以使对bash配置文件的更改生效。
杰里米·里基茨

15
或做exec $SHELL -l(低L)
pduersteler

3
我必须在哪里添加“ $ HOME / .rbenv / shims”和“ $ HOME / .rbenv / bin”?
Benedikt

3
我这样写:export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi工作得很好:)还检查rbenv声明后的PATH初始化。
merqlove

1
就我而言,我需要将这两行添加到.bashrc(在Ubuntu中为Bash)中,然后得到正确的ruby版本。如果将其附加到.bash_profile中,它将不起作用。
alexhilton 2014年

98

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

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

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

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


+1的链接。+1与确实投票的答案相矛盾。这就提出了一个进一步的问题-如果有人可以插话-如何export PATH="$HOME/.rbenv/bin:$PATH工作(这对我来说是失败的)?
杰罗姆

1
不会有一个~/.rbenv/bin/,如果你通过自制软件或linuxbrew安装。而且您不必自己设置垫片路径,rbenv init这对您来说(以及更多)也是如此
丹尼斯,

这解决了我的问题。
马丁·钱伯林

这应该在自述文件中
onmyway133'9

经过数小时的尝试,为我工作。谢谢!
cjs1978 '18 -10-2

91

这可能是一个老问题,但是Google带领我来到这里,出于后人的考虑,我认为我会分享。

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

将其切换到新版本。


7
是的-有趣的是rbenv安装指南完全没有提到运行本地命令。许多博客提醒您在全球范围内运行rbenv,而不是在本地。好答案。
Steve Midgley 2014年

同样的问题。相同的解决方案。(可能不得不考虑提交PR来建议何时全球Ruby版本被〜/ .ruby-version否决...)
Mark Glossop

我不得不通过在Centos 7中用YUM删除来摆脱系统,直到那以后我才能看到rbenv中选择的正确版本
Joe Walker

我很震惊,我不得不深入研究才能找到答案,这对我来说是正确的答案。
伊恩·赫兹

我发现rbenv版本命令说也许rvm在.ruby-versions中设置了2.3.1。我不久前已停止使用rvm,并更改为rbenv。删除.ruby-versions并再次运行rbenv版本,并且它具有rbenv选择的最新版本(请确保您在.bash_profile中具有上面的eval语句!)。现在,所有工作都像以前一样。感谢您帮助我解决此问题。
约翰·伍

45

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

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

这不是rbenv使用的填充程序,(在MacOS上)它应该看起来像:
/Users/<username>/.rbenv/shims/ruby

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

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
我建议您为排除故障而取消设置项目特定的“本地”版本和外壳特定的“ 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将使用硬编码的路径指向错误的红宝石,而其他几处内容将放置在错误的位置,因此只需重新安装gem。

PS:如果您的MacOS不服从您(如上所述),那么您可能不得不寻找另一种方法来修改您的路径,但这不太可能成为问题,因为“ Macs可以工作”;)


1
啊,队友,终于!在找到这一解决方案之前,我尝试了25种不同的解决方案,谢谢
Danny Santos

详细说明的解决方案。谢谢。
杀死屏幕

23

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

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

重新安装rbenv时,将它插入〜/ .bash_profile中。现在可以完美运行。


1
请注意与我遇到相同问题的其他人:由于某些原因,哪个rbenv在先工作,因此该行从未执行过。我使用直接评估“ $(rbenv init-)”修复了它。
dadoonet

这个用例很好的eval声明!
杀死屏幕

18

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

这完美地工作。我将其添加到.bash_profile中,而不是/ zshenv。
康拜尔

8

运行此命令

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

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

这将解决您的问题参考


1
我花了几个小时来解决这个问题。最终,您的解决方案有所帮助。谢谢!!
User7354632781 18-10-27

5

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

~/.bash_profile

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

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

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

~/.zshrc

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

然后只需重新启动终端即可,现在应该可以了。


Mac OS Catalina上的用户应遵循zsh指令
Abhinay

4

rbenv help shell

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

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

rbenv shell 1.9.3-p125


“ rbenv shell xyz”对我有用。在较高描述的“rbenv局部xyz”排名回答以上在OS X上没有工作
杰里米·雷阿

4

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

之后,在的帮助下使用ruby版本进行安装,切换和使用都没有问题rbenv

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


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路径在我的rbenv路径之前$PATH。运行brew uninstall ruby为我修复了它。


4

跑:

rbenv init

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

rbenv local 2.4.0

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

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


3

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

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


3

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

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



2

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


2

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

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

1

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

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

这是什么意思?这意味着当您安装红宝石时,它们将安装在给定的主目录下的.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 

0

奇怪的是,rbenv版本未设置.rbenv文件。检查以下命令:ls -ltra->查看是否写入了rbenv


0

您可以尝试使用chruby吗?chruby不依赖于垫片,而不是只修改PATHGEM_HOMEGEM_PATH


-1

我忘记在安装rbenv之前删除rvm。我删除了rvm并重新安装了rbenv,但系统仍未使用rbenv指定为global的Ruby版本。我尝试关闭终端机,但是只有在重新启动整个计算机后它才起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.