rbenv没有改变ruby版本

ajo*_*sen 247 ruby rbenv

我根据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
Run Code Online (Sandbox Code Playgroud)

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

rbenv local
rbenv: no local version configured for this directory
Run Code Online (Sandbox Code Playgroud)

def*_*vol 470

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

$ env | grep PATH
Run Code Online (Sandbox Code Playgroud)

如果使用bash,还要检查〜/ .bash_profile中是否包含以下内容;如果使用zsh,请检查〜/ .zshenv

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
Run Code Online (Sandbox Code Playgroud)

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

  • 在OSX上,不要忘记退出OSX会话,然后重新登录以使更改bash配置文件生效. (31认同)
  • 或者做`exec $ SHELL -l`(低L) (13认同)
  • 我这样做:`export RBENV_ROOT ="$ HOME/.rbenv"如果是哪个rbenv>/dev/null; 然后评估"$(rbenv init - )"; fi`工作得很好:)还在rbenv声明后检查PATH init. (3认同)
  • 我在哪里添加"$ HOME/.rbenv/shims"和"$ HOME/.rbenv/bin"? (2认同)

alp*_*ogg 89

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

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

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

IOW,它仍然默认为系统.快点

[~/.rbenv] $ rbenv local 2.0.0-p247
Run Code Online (Sandbox Code Playgroud)

把它切换到新版本.

  • 是的 - 有趣的是rbenv安装指南根本没有提到运行本地命令.很多博客提醒你运行rbenv全球但不是本地的.很好的答案. (7认同)

mjm*_*vis 86

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

#PATH for rbenv
export PATH="$HOME/.rbenv/shims:$PATH"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果您通过 homebrew 或 linuxbrew 安装,则不会有 `~/.rbenv/bin/`。而且您不必自己设置垫片路径,因为 [`rbenv init` 为您执行此操作(以及更多操作)](https://github.com/rbenv/rbenv#how-rbenv-hooks-into-你的壳)。 (4认同)
  • 这解决了我的问题。 (2认同)

mis*_*que 38

2023 更新(Macbook Ventura+)

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

rbenv init
Run Code Online (Sandbox Code Playgroud)

这可能会给出如下输出:

# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init - zsh)"
Run Code Online (Sandbox Code Playgroud)

只需打开您的.zshrc文件:

sudo nano ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

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

添加这一行:

eval "$(rbenv init - zsh)"
Run Code Online (Sandbox Code Playgroud)

保存文件(如果使用 sudo nano,你可以这样做:) 然后CTRL + X(对于 Mac)YEnter

.zshrc现在,像这样刷新您的个人资料:

source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

现在输入ruby --version,这必须为您提供由 提供的 ruby​​ 版本rbenv


小智 33

第一步是找出被调用的红宝石:
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.

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

  • 啊,伙计,终于!在我找到这个之前尝试了大约 25 种不同的解决方案,谢谢 (2认同)
  • 此回复是最有帮助(且最完整)的回复。一个小变体:`if which rbenv &gt; /dev/null; 然后 eval "$(rbenv init -)"; fi &gt;&gt; ~/.bash_profile` 后跟 `source ~/.bash_profile` (2认同)

Nea*_*eal 21

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

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*per 13

在我的情况下,改变~/.zshenv不起作用.我不得不在里面做出改变~/.zshrc.

我刚补充说:

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

在顶部~/.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]
Run Code Online (Sandbox Code Playgroud)

  • 这完全有效。我将其添加到 .bash_profile 而不是 /zshenv 中。 (2认同)

drj*_*nco 8

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

~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

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

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
Run Code Online (Sandbox Code Playgroud)

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

~/.zshrc
Run Code Online (Sandbox Code Playgroud)

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

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


小智 8

我尝试了所有解决方案,但没有一个对我有用。即使我也在文件中包含了路径.zshrc

就我而言,我使用MacBook Pro M2的是 macOS Ventura 13.2。我正在使用React Native 0.71.2,它需要 Ruby2.7.6版本。

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

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
Run Code Online (Sandbox Code Playgroud)


Sin*_*hak 7

运行此命令

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

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

这将解决您的问题参考

  • 我花了几个小时来解决这个问题。最后,您的解决方案有所帮助。谢谢!! (2认同)

htm*_*rum 5

rbenv help shell

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

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

rbenv shell 1.9.3-p125


Roo*_* V. 5

对我来说,最简单的使用方法是添加rbenv到配置中的插件部分。就我而言,它看起来类似于:zshrbenv.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)
Run Code Online (Sandbox Code Playgroud)

之后,在rbenv.

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


djb*_*djb 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
Run Code Online (Sandbox Code Playgroud)

不知何故,我也通过 Homebrew 安装了 Ruby,并且 Homebrew 路径在我的$PATH. 跑步brew uninstall ruby为我修好了。


Bas*_*ano 5

适合鱼壳用户

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/
Run Code Online (Sandbox Code Playgroud)


Ami*_*itF 5

跑:

rbenv init
Run Code Online (Sandbox Code Playgroud)

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

rbenv local 2.4.0
Run Code Online (Sandbox Code Playgroud)

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

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


Pro*_*ton 5

我在MacBook Pro Catalina OSMacBook Pro Big Sur上使用rbenv设置Ruby时遇到了这个问题。

这是我修复的方法

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

rbenv init
Run Code Online (Sandbox Code Playgroud)

这会给你一些关于做什么的指导。基本上,您必须打开~/.zshrc文件并将其添加到文件中eval "$(rbenv init -)"。您可以通过运行以下命令来完成此操作:

echo 'eval "$(rbenv init -)"' >> ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

接下来,运行以下命令来设置您的 ruby​​ 版本:

rbenv local your-desired-ruby-version
Run Code Online (Sandbox Code Playgroud)

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

rbenv local 3.0.1
Run Code Online (Sandbox Code Playgroud)

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

ruby -v 
rbenv versions
Run Code Online (Sandbox Code Playgroud)

你会看到你想要的 ruby​​ 版本已经为你设置好了。

就这样。

我希望这有帮助