我根据 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
检查 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 不在您的路径中,将运行任何版本。
我通过将以下内容添加到我的 ~/.bash_profile
来解决此问题:
#PATH for rbenv
export PATH="$HOME/.rbenv/shims:$PATH"
这是在 https://github.com/sstephenson/rbenv 中记录的内容。
据我所知,不是 ~/.rbenv/bin
目录,@rodowi 在帖子中提到了该目录。
export PATH="$HOME/.rbenv/bin:$PATH
如何工作(因为它对我来说失败了)?
~/.rbenv/bin/
。而且您不必像 rbenv init
does this (and more) for you 那样自己设置垫片路径。
这可能是一个老问题,但谷歌把我带到了这里,为了后代,我想我会分享。
在上述许多推荐的解决方案之后,我的问题仍然存在。像 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
将其切换到新版本。
第一步是找出哪个 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 可以正常工作”;)
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi >> ~/.bash_profile
后跟 source ~/.bash_profile
在我的情况下,更改 ~/.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]
我刚刚发现了同样的问题。我所做的是卸载 rbenv(通过自制软件)并重新安装它。我还添加了
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
当我重新安装 rbenv 时进入 ~/.bash_profile。现在完美运行。
运行此命令
将 rbenv 添加到 bash 以便在每次打开终端时加载
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile
这将解决您的问题Reference
在 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 版本已经为你设置好了。
就这样。
我希望这有帮助
如果您使用的是 bash,请转到
~/.bash_profile
并添加以下行(如果它不存在)
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
如果您使用的是 Zsh,请转到
~/.zshrc
并在 .zshrc 文件的末尾添加相同的代码行。
然后只需重新启动您的终端,现在应该没问题了。
rbenv help shell
“通过在 shell 中设置 'RBENV_VERSION' 环境变量来设置特定于 shell 的 Ruby 版本。此版本覆盖本地应用程序特定版本和全局版本。应该是与 rbenv 已知的 Ruby 版本匹配的字符串。特殊版本字符串 'system ' 将使用您的默认系统 Ruby。运行 rbenv 版本' 以获取可用 Ruby 版本的列表。”
如果 rbenv 安装正确, ruby -v 将对应
rbenv shell 1.9.3-p125
我有同样的问题,但由 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
为我修复了它。
鱼壳用户
set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/
跑:
rbenv init
在我运行之后,当我设置我的本地 rbenv 版本时:
rbenv local 2.4.0
然后我的 ruby -v
和我的 rbenv local
版本重合了。
注意:您可能还想退出您所在的目录,然后再回到它,我注意到这对我来说是必要的,以便让事情正常工作。
对我而言,将 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 版本时没有问题。
请注意在进行更改后重新启动您的终端会话。
当我出现这些症状时,问题是我试图切换到的新 Ruby 版本的安装在中途失败,而我没有注意到。解决方法是删除并重新安装它。
(这意味着即使 ruby 1.9.3 出现在可用版本的 rbenv 列表中,它在 rbenv 假设它的路径上没有可执行文件。由于 rbenv 试图通过添加一个位置来更改您的 ruby 版本您的路径,如果它前面的位置实际上没有任何内容,您的操作系统将很乐意继续搜索您的默认路径并找到您的系统版本,在我的情况下就像问题的 1.8.7。)
确保 .bash_profile
的最后一行是:
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
接受的答案建议添加以下内容:
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
我遇到了同样的问题。通过使用 sudo
运行 rbenv global
命令修复了此问题。我认为这是许可问题。
更新:我终于找到了解决方案。我的 Mac 上有一个相同的文件“版本”,位于 /usr/local/Cellar/rbenv/0.3.0/
下。我认为它偶尔是错误创建的。你应该删除它。
这发生在我重新安装 rbenv
之后。显然我的主目录中有一个 .ruby-version
文件,指定了一个不再存在的版本。删除文件后,一切正常。
有很多误导性的答案有效。我认为值得一提的是 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
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]
我在安装 rbenv 之前忘记删除 rvm。我删除了 rvm 并重新安装了 rbenv,但系统仍然没有使用 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
奇怪的是,rbenv
版本没有设置 .rbenv
文件。
检查:ls -ltra
-->看到写了一个rbenv
。
将 eval "$(rbenv init -)" 添加到我的 mac 上的 .bash_profile 解决了这个问题。 rbenv local ruby -v 给了集合
我建议不要使用 rbenv 有几个问题。
大部分时间安装 ruby 后,它不附带捆绑版本 在运行捆绑安装时创建捆绑版本拾取问题
为了减少这么多的努力,我建议使用 rvm,让生活更轻松。按照此链接安装 rvm https://nrogap.medium.com/install-rvm-in-macos-step-by-step-d3b3c236953b
不定期副业成功案例分享
exec $SHELL -l
(低 L)export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
工作得很好:) 在 rbenv 声明之后还要检查 PATH init 的情况。