ChatGPT解决这个技术问题 Extra ChatGPT

rbenv 不改变 ruby 版本

我根据 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
您确定将 init 正确放入 bashrc 吗?你的 $PATH 是什么样的?
这些命令都没有改变 rbenv 正在使用的 Ruby 版本,但它似乎没有使用您的默认 Ruby。
@d11wtq 是正确的。它显然不在我的 ~/.bash_profile 中。
确保您遵循 rbenv 的所有安装步骤。请参阅 heremy answer
如果 ruby 是通过 brew 安装的,请先卸载它,然后使用 rbenv。

J
Jett

检查 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 local <ruby-version>,您可能会意外创建该文件。执行 $ rbenv global <ruby-version> 会修改 $HOME/.rbenv/version 文件,并且 $HOME 文件夹中存在的 .ruby-version 文件将覆盖 $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 不在您的路径中,将运行任何版本。


在 OSX 上,不要忘记退出 OSX 会话,然后重新登录以使对 bash 配置文件的更改生效。
或执行 exec $SHELL -l(低 L)
我必须在哪里添加“$HOME/.rbenv/shims”和“$HOME/.rbenv/bin”?
我做了这样的:export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi 工作得很好:) 在 rbenv 声明之后还要检查 PATH init 的情况。
就我而言,我需要将这两行附加到 .bashrc(Ubuntu 中的 Bash)中,然后我得到正确的 ruby 版本。如果将其附加到 .bash_profile 中,它将不起作用。
m
mfaani

我通过将以下内容添加到我的 ~/.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 如何工作(因为它对我来说失败了)?
如果您通过 homebrew 或 linuxbrew 安装,则不会有 ~/.rbenv/bin/。而且您不必像 rbenv init does this (and more) for you 那样自己设置垫片路径。
这解决了我的问题。
这应该在自述文件中
经过数小时尝试其他东西后为我工作。谢谢!
a
alphadogg

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

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

将其切换到新版本。


是的 - 有趣的是 rbenv 安装指南根本没有提到运行本地命令。许多博客提醒您运行 rbenv 全局而不是本地。很好的答案。
同样的问题。相同的解决方案。 (可能需要提交 PR 以告知全局 Ruby 版本何时被 ~/.ruby-version 否决...)
我不得不通过在 Centos 7 中使用 YUM 删除系统来摆脱系统,只有在那之后我才能看到在 rbenv 中选择了正确的版本
我很震惊我不得不挖掘这么远的答案,这对我来说是正确的。
我发现 rbenv 版本命令说 2.3.1 可能是 rvm 在 .ruby-versions 中设置的。我不久前停止使用 rvm 并更改为 rbenv。删除 .ruby-versions 并再次运行 rbenv 版本,它具有 rbenv 选择的最新版本(确保您在 .bash_profile 中有上面的 eval 语句!)。现在,一切都像以前一样工作。感谢您帮助我解决了这个问题。
J
Jett

第一步是找出哪个 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 可以正常工作”;)


啊,伙计,终于!在找到这个之前尝试了大约 25 种不同的解决方案,谢谢
很好解释的解决方案。谢谢你。
这个回复是最有帮助的(也是最完整的)。一个小的变体:if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi >> ~/.bash_profile 后跟 source ~/.bash_profile
P
Peter Piper

在我的情况下,更改 ~/.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 中。
可能有必要运行 source ~/.zshrc,但它对我有用。谢谢。
N
Neal

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

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

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


请注意与我遇到相同问题的其他人:由于某些原因,哪个 rbenv 之前正在工作,因此从未执行过此行。我直接使用 eval "$(rbenv init -)" 修复了它。
这个用例的好小 eval 语句!
R
Rob Bednark

运行此命令

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

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

这将解决您的问题Reference


我花了几个小时来解决这个问题。最后,您的解决方案有所帮助。谢谢!!
我也尝试了上面的所有答案,除了这个之外没有一个对我有用。谢谢
P
Promise Preston

在 MacBook Pro Catalina OS 和 MacBook 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 版本已经为你设置好了。

就这样。

我希望这有帮助


你是一个🌟。曾在 macOS Monterey 上工作。
d
drjorgepolanco

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

~/.bash_profile

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

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

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

~/.zshrc

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

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


Mac os Catalina 上的人,应该遵循 zsh 指令
h
htmldrum

rbenv help shell

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

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

rbenv shell 1.9.3-p125


'rbenv shell xyz' 对我有用。上面排名较高的答案中描述的“rbenv local xyz”在 OS X 上不起作用。
d
djb

我有同样的问题,但由 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 为我修复了它。


如果 ruby 是通过 brew 安装的,必须卸载它才能正确使用 rbenv
B
Basil Mariano

鱼壳用户

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

它奏效了,你是怎么想到这个解决方案的?
它的工作原理谢谢你,同样的问题你是怎么来的?????
老实说,我不记得了,哈哈 那是 2017 年的答案,我想知道为什么尽管现在专注于移动开发,但它仍然有效,所以我不再使用这些东西了。
A
AmitF

跑:

rbenv init

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

rbenv local 2.4.0

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

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


R
Rootical V.

对我而言,将 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 版本时没有问题。

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


D
David

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

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


j
janos

确保 .bash_profile 的最后一行是:

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

D
Daniel Viglione

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

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

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

T
Tomer Shetah

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

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


J
John K. Chow

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


m
mfaani

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

$ brew install rbenv $ rbenv init 并按照它给你的说明进行操作。这就是我得到的:

~ $ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

我更新了我的 ~/.bash_profile...

关闭终端并再次打开它通过运行验证它是否正常工作:

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

现在只需安装您想要的版本: rbenv install


O
O'seun Iyadi

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]

p
postmodern

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


a
ajain

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


D
David Hempy

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

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

T
Tomer Shetah

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

检查:ls -ltra -->看到写了一个rbenv


S
Sachin D Naik

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


R
Raja Bose

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

大部分时间安装 ruby 后,它不附带捆绑版本 在运行捆绑安装时创建捆绑版本拾取问题

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


如果他们的组织正在使用 rbenv 或者他们出于其他原因必须使用 rbenv,这并不能解决 OP 的问题。与问题无关