【问题标题】:Updating ruby version with Rbenv but gems apparently not updated使用 Rbenv 更新 ruby​​ 版本,但 gems 显然没有更新
【发布时间】:2013-12-11 23:02:08
【问题描述】:

我刚刚在 Ubuntu 生产服务器上使用 rbenv 将 Ruby 从版本 1.9.3-p448 更新到 1.9.3-p484。更新似乎成功了。 Ruby 版本显示我刚刚更新的最新版本。

但是,当我查看目录下此版本 1.9.3-p484 的 gems 时: .rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems.

我只在那个目录中找到了一些宝石。当我查看以前版本的目录时,那里有一大堆宝石。我是否错过了 ruby​​ 更新过程中的某个步骤?

现在我正在使用新的 ruby​​ 版本,是否需要重新安装此版本的所有 gem?如果是这样,运行bundle install 会完成这项工作吗?

【问题讨论】:

    标签: ruby rubygems gem bundler rbenv


    【解决方案1】:

    简而言之,是的。由于 rbenv 为每个 ruby​​ 安装维护一个单独的目录,因此您需要再次运行 bundle 来为该 ruby​​ 安装 gem。

    例如,当您安装在 ruby​​ 1.9.3-p448 下运行的 gem 时,该 gem 将仅为该 ruby​​ 安装。当您切换到另一个版本的 ruby​​ 时,该 gem 将无法使用,直到您安装它。

    【讨论】:

    • 感谢您的回复。您提到当我切换到另一个版本的 ruby​​ 时,旧版本的 gems 将无法用于新版本。但是,我发现我使用的是新版本很奇怪,即使尚未安装新版本的 gem,我的应用程序仍然可以正常工作。如果我在我的应用程序中执行 bundle exec gem 列表,它会显示所有以前的 gem。只是想了解为什么会这样。
    • 出于好奇,如果您在应用程序目录中运行ruby -v,输出是什么?如果您之前使用rbenv [global|local] <ruby version> 配置了 rbenv,则该版本仍将在该目录及其子目录中使用。
    • ruby 版本是新版本 1.9.3-p484。安装新版本后,我做了 rbenv global 和 rbenv rehash。这让我感到困惑,因为我有新版本的 ruby​​ 并且没有为这个版本的 ruby​​ 重新安装 gems,但我的应用程序仍在运行。现在想一想,当我运行 bundle exec gem list 时,我相信列出的 gem 是 Gemfile.lock 中的那些。如果我只运行 gem list,它只会列出 .rbenv/versions/1.9.3-p484... 文件夹中的内容。这可能解释了为什么应用程序在没有新安装 gem 的情况下仍然运行。
    【解决方案2】:

    是的,您需要为活动的 ruby​​ 版本运行 bundle install。请确保正确设置了活动的 ruby​​ 版本和应用程序的 gemset。只需执行以下操作(在 Linux/MacOS 中):

    $ cat .ruby-version
    ruby-1.9.3-p484
    
    $ cat .ruby-gemset
    your_app_name
    

    在 gem 更新之前,请重新进入您的应用程序/gem 文件夹。

    $ cd ..
    $ cd your_app_name
    

    我有一个补充说明。如果您的应用程序是 gem,则没有理由将 .ruby-version.ruby-gemset 文件添加到 git 存储库中,只需将它们添加到 .gitignore 文件中.当您的应用程序是 rails 应用程序时,将文件与 Gemfile.lock 添加到 git 存储库中是有意义的,因为您修复了 ruby​​ 版本,并且为 web-设置了 gem-应用到那些唯一有效的应用程序。此外,像 heroku 这样的一些云服务需要将 Gemfile.lock 添加到 git 存储库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2018-04-16
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多