我根据github的说明安装了rbenv。我正在运行OSX,但我已经在Ubuntu 12.04虚拟机上尝试了这一点,并得到了相同的结果。下面是当我尝试更改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/。$HOME/.rbenv/bin
$ env | grep PATH
还要检查~/中是否包含以下内容。Bash_profile如果使用bash或~/。Zshenv如果使用ZSH
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/。如果$HOME文件夹中存在一个.ruby-version文件,则会覆盖$HOME/.rbenv/version设置的版本。
从文档中可以看出:
选择Ruby版本
当你执行一个shim时,rbenv通过从以下源读取它来决定使用哪个Ruby版本,顺序如下:
如果指定了RBENV_VERSION环境变量。您可以使用rbenv shell命令在当前shell会话中设置此环境变量。
通过搜索您正在执行的脚本的目录及其每个父目录,直到到达文件系统的根目录,可以找到的第一个.ruby版本文件。
通过搜索当前工作目录及其每个父目录找到的第一个.ruby版本文件,直到到达文件系统的根目录。您可以使用rbenv local命令修改当前工作目录中的.ruby-version文件。
全局~/。rbenv /版本文件。可以使用rbenv global命令修改该文件。如果全局版本文件不存在,rbenv假设您想要使用“系统”ruby—即。如果rbenv不在您的路径中,将运行任何版本。
对我来说,使用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:
$ which ruby
你的系统会说:
/usr/bin/ruby
这不是rbenv使用的垫片,它(在MacOS上)应该看起来像:
/Users/<username>/.rbenv/shims/ruby
shim实际上是一个脚本,它的作用类似于重定向到您设置的ruby版本。
为了解决问题,我建议您取消特定于项目的“本地”版本,以及特定于shell的“shell”版本,并使用在~/纯文本文件中确定的“全局”版本设置进行测试。Rbenv /version,在你的例子中,它只是版本号“1.9.3”。
$ rbenv global 1.9.3
$ rbenv local --unset
$ rbenv shell --unset
你可以在你的项目文件夹(不是主文件夹)的根目录下执行ls -laG,以确保那里不再有“。ruby-version”文件。
您可以使用rbenv版本来确定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
如果您试图在Rails上运行Ruby,那么您需要首先让这些都正常工作,然后再次安装Rails gem。以前安装的Rails会使用硬编码路径到错误的ruby,其他一些东西也会在错误的位置,所以只需重新安装gem。
附注:如果你的MacOS不服从你(*上面提到过),那么你可能必须找到另一种方法来修改你的路径,但这不太可能是一个问题,因为“mac只是工作”;)
公认的答案建议增加以下内容:
export PATH="$HOME/.rbenv/bin:$PATH"
这将不会在Mac OSX上工作,OP引用。事实上,如果你通过brew install rbenv安装rbenv,这是Mac OSX中唯一的安装方法,因为curl - ssl 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
这是什么意思?这意味着当你安装ruby时,它们将安装在给定的主目录下。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
这已经通过自制程序安装完成了。在homebrew安装中必须完成一个重要步骤,就像在Linux安装中一样。您必须将rbenv垫片添加到路径中。为了做到这一点,当你的shell启动时,你必须计算以下命令(这将反过来将rbenv shims添加到你的$PATH的开头):
$ vim ~/.bash_profile
eval "$(rbenv init -)"
$ source ~/.bash_profile
现在当你运行echo $PATH,你会看到rbenv shims:
$ echo $PATH
/Users/viggy/.rbenv/shims:
现在检查你的ruby版本,它会反映安装的rbenv ruby:
ruby -v
ruby 2.6.0p0
这里的所有其他答案都为各种情况提供了很好的建议,但还有一种更简单的方法。
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 README的步骤。
$ brew安装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 <version>
我在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版本。