【问题标题】:Rails install fails: activesupport requires Ruby version >= 2.2.2Rails 安装失败:activesupport 需要 Ruby 版本 >= 2.2.2
【发布时间】:2016-07-21 23:04:37
【问题描述】:

我想创建一个新的 Rails 应用程序。我将 rvm 与 ruby​​-2.1.2 一起使用。我正在使用 @global gemset 并计划使用 bundler 来管理 gem 依赖项。但是,gem install rails 失败:

$ gem install rails
Fetching: concurrent-ruby-1.0.3.pre3.gem (100%)
Successfully installed concurrent-ruby-1.0.3.pre3
Fetching: minitest-5.9.0.gem (100%)
Successfully installed minitest-5.9.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: activesupport-5.0.0.gem (100%)
ERROR:  Error installing rails:
    activesupport requires Ruby version >= 2.2.2.

是的,确实我使用的是 ruby​​-2.1.2 而不是 ruby​​-2.2.2,但我是否仍然应该被允许使用 ruby​​-2.1.2?我们不再允许使用 ruby​​-2.1.2 了吗?

我认为 ActiveSupport 5 可能已经安装在 @global gemset 中并且 ActiveSupport 5 需要 2.2.2,但实际上 @global gemset 中没有 ActiveSupport 5:

$ rvm gemdir
/Users/myuser/.rvm/gems/ruby-2.1.2@global
$ cd /Users/myuser/.rvm/gems/ruby-2.1.2@global
$ cd gems
$ ls
bundler-unload-1.0.2        gem-wrappers-1.2.4      rake-10.1.0         rvm-1.11.3.9            tzinfo-1.2.2
concurrent-ruby-1.0.3.pre3  i18n-0.7.0          rdoc-4.1.0          test-unit-2.1.2.0
executable-hooks-1.3.2      minitest-5.9.0          rubygems-bundler-1.4.4      thread_safe-0.3.5

那么在尝试使用 ruby​​-2.1.2 时如何防止出现此错误?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您可以使用任何 ruby​​ 版本的遗嘱,但是您不能在最新版本的 Rails 中使用任何 ruby​​ 版本。 当您执行 gem install rails 时,您将获得最新的 Rails 版本(Rails 5),它与 Ruby 2.1.2 根本不兼容。

    如果你真的想使用 Ruby 2.1.2,试试这个:gem install rails -v 4.2.2

    作为 gemset 的使用,由于我喜欢这种井井有条的方式,所以我从不使用 global。我总是为每个项目创建一个新的 gemset。这保证了我可以拥有许多项目,每个项目都有一个 ruby​​ 和 rails 版本,而不会出现 gem 之间的任何不兼容问题。这个 gemset 作为你的 Ruby on Rails 工作区。如果您按项目将它们分开,您将最大限度地减少与 gem 不兼容的奇怪几率。

    【讨论】:

    • 你的第一点回答了我的问题。但是,我不得不不同意你的第二点。每次创建新 gemset 时,每个项目都会有相似的 gem 副本。 bundler 的全部目的是解决依赖问题并使用 Gemfile 加载正确的 gem,因此不会发生 gem 不兼容的奇怪问题。
    • @Donato 这不是我随机想到的。这不是我的愿望。您可以从最可靠的来源阅读规范:rvm.io/gemsets/basics 来自“警告!” session: "RVM 为每个 Ruby 版本和 gemset 提供了一个单独的 gem 目录。* 这意味着必须为每个修订版和 gemset 显式安装 gems。RVM 帮助您管理此过程;请参阅 RVM 集文档页面。"
    • 系统上不同项目的复制 gem 是免费的。灵活性和理智更有价值。
    • 2020 年不再适用,因为其他依赖项似乎需要 ruby​​ 2.5+
    【解决方案2】:
    gem install rails
    

    以上命令将使用最新版本的 Rails,即 Rails 5 的稳定版本,需要 >= ruby​​ 2.2.2。

    我们可以使用 2.1.2 和较低版本的 Rails。请在安装rails时指定版本可能会解决您的问题,例如:

    gem install rails --version 4.2.4
    

    gem install rails -v 4.2.4
    

    让我知道它是否有效。 谢谢。

    【讨论】:

      【解决方案3】:

      我在 CocoaPod 之前遇到过它,它通过以下方式修复:

      1. sudo gem install activesupport -v 4.2.6
      2. sudo gem 安装 cocoapods

      https://github.com/CocoaPods/CocoaPods/issues/5603

      【讨论】:

        【解决方案4】:

        使用 RVM 对我有用,我已按照说明进行操作 here

        curl -sSL https://rvm.io/mpapis.asc | gpg --import - &&\
        curl -L get.rvm.io | bash -s stable &&\
        source /etc/profile.d/rvm.sh && /usr/local/rvm/bin/rvm reload &&\
        /usr/local/rvm/bin/rvm requirements run &&\
        /usr/local/rvm/bin/rvm install 2.2.4 &&\
        /usr/local/rvm/bin/rvm use 2.2.4 --default && ruby --version
        

        我的环境是一个安装了 CentOS 的 Docker 容器

        【讨论】:

          【解决方案5】:

          如果您使用的是 rbenv

          请使用此 rbenv-doctor 脚本验证 rbenv 是否已正确设置:

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

          【讨论】:

            猜你喜欢
            • 2017-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-21
            • 1970-01-01
            相关资源
            最近更新 更多