【问题标题】:rbenv not changing ruby versionrbenv 不改变 ruby​​ 版本
【发布时间】:2012-06-12 00:49:21
【问题描述】:

我根据 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 的所有安装步骤。见here 或my answer

标签: ruby rbenv


【解决方案1】:

检查 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”?
  • 就我而言,我需要将这两行附加到 .bashrc(Ubuntu 中的 Bash)中,然后得到正确的 ruby​​ 版本。如果将其附加到 .bash_profile 中,它将不起作用。
【解决方案2】:

我通过将以下内容添加到我的 ~/.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 那样自己设置垫片路径。
  • 这解决了我的问题。
  • 这应该在自述文件中
  • 在尝试了几个小时后为我工作。谢谢!
【解决方案3】:

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

在上述许多推荐的解决方案之后,我的问题仍然存在。像 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 语句!)。现在,一切都像以前一样工作。感谢您帮助我解决了这个问题。
【解决方案4】:

第一步是找出正在调用的 ruby​​:

$ which ruby

你的系统说:

/usr/bin/ruby

这不是 rbenv 使用的 shim,它(在 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 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。

P。 S. 如果您的 MacOS 不服从您(*上面提到),那么您可能必须找到另一种方法来修改您的路径,但这不太可能成为问题,因为“Mac 可以正常工作”;)

【讨论】:

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

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

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

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

【讨论】:

  • 请注意与我遇到相同问题的其他人:由于某些原因,哪个 rbenv 之前正在工作,因此该行从未执行过。我直接使用 eval "$(rbenv init -)" 修复了它。
  • 这个用例的 eval 语句不错!
【解决方案6】:

在我的情况下,更改 ~/.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。
【解决方案7】:

运行此命令

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

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

这将解决您的问题Reference

【讨论】:

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

我在 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​​ 版本已经为你设置好了。

就是这样。

我希望这会有所帮助

【讨论】:

    【解决方案9】:

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

    ~/.bash_profile
    

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

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

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

    ~/.zshrc
    

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

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

    【讨论】:

    • Mac os Catalina 上的人,应该遵循 zsh 指令
    【解决方案10】:

    rbenv help shell

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

    前提是rbenv安装正确,ruby -v会对应

    rbenv shell 1.9.3-p125

    【讨论】:

    • 'rbenv shell x.y.z' 对我有用。上面排名较高的答案中描述的“rbenv local x.y.z”在 OS X 上不起作用。
    【解决方案11】:

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

    【讨论】:

      【解决方案12】:

      鱼壳用户

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

      【讨论】:

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

      运行:

      rbenv init
      

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

      rbenv local 2.4.0
      

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

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

      【讨论】:

        【解决方案14】:

        就我而言,使用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版本都没有问题。

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

        【讨论】:

          【解决方案15】:

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

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

          【讨论】:

            【解决方案16】:

            确保.bash_profile 的最后一行是:

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

            【讨论】:

              【解决方案17】:

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

              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
              

              这已经通过 homebrew 安装完成。在自制软件安装中必须完成一个重要步骤,就像在 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 
              

              【讨论】:

                【解决方案18】:

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

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

                【讨论】:

                  【解决方案19】:

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

                  【讨论】:

                    【解决方案20】:

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

                    1. $ brew install rbenv
                    2. $ rbenv init 并遵循它给你的说明。这是我得到的:
                    ~ $ rbenv init
                    # Load rbenv automatically by appending
                    # the following to ~/.bash_profile:
                    
                    eval "$(rbenv init -)"
                    

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

                    1. 关闭终端并再次打开它
                    2. 通过运行验证它是否正常工作:
                    $ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
                    
                    1. 现在只需安装您想要的版本:rbenv install &lt;version&gt;

                    【讨论】:

                      【解决方案21】:

                      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]
                      

                      【讨论】:

                        【解决方案22】:

                        您可以尝试使用chruby 吗? chruby 不依赖 shims,而是只修改 PATH、GEM_HOME、GEM_PATH。

                        【讨论】:

                          【解决方案23】:

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

                          【讨论】:

                            【解决方案24】:

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

                            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
                            

                            【讨论】:

                              【解决方案25】:

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

                              检查:ls -ltra --> 以查看是否写入了 rbenv。

                              【讨论】:

                                【解决方案26】:

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

                                【讨论】:

                                  【解决方案27】:

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

                                  1. 安装 ruby​​ 后,它不附带捆绑版本
                                  2. 大多数时候在运行 bundle install 时会产生 bundler 版本拾取问题

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

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2018-04-16
                                    • 2012-12-02
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2012-02-27
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多