为什么在未指定版本时捆绑程序需要一个非常旧的 gem 版本?

Why is bundler requiring an extremely old version of a gem when version not specified?

我有一个如下所示的 Gemfile:

gem 'google-api-client', :require => 'google/api_client'
gem 'my_baseimage', '0.0.3', :git => 'https://github.com/xxx/BaseImage.git'

我有一个基础 gem,它需要一系列跨项目的通用 gem。

但是,当我 运行 bundle install 时,我看到这样的错误:

  In Gemfile:
    activerecord (>= 0) ruby depends on
      activemodel (= 4.1.11) ruby depends on
        activesupport (= 4.1.11) ruby

    activerecord (>= 0) ruby depends on
      activemodel (= 4.1.11) ruby depends on
        activesupport (= 4.1.11) ruby

    google-api-client (>= 0) ruby depends on
      activesupport (~> 3.2) ruby
Bundler could not find compatible versions for gem "rack":
  In Gemfile:
    rack-contrib (= 1.1.0) ruby depends on
      rack (>= 0.9.1) ruby

    sinatra (>= 0) ruby depends on
      rack (~> 1.4) ruby

    google-api-client (>= 0) ruby depends on
      rack (= 1.2.0) ruby

    rack (>= 0) ruby

google-api-client 不需要机架 1.2,因为 version 0.1,而且 my_baseimage 需要 0.7.1。当我 运行 一个 gem dependency -R 时,我看到这个:

    google-api-client-0.7.1 (addressable (>= 2.3.2))
    google-api-client-0.7.1 (autoparse (>= 0.3.3))
    google-api-client-0.7.1 (extlib (>= 0.9.15))
    google-api-client-0.7.1 (faraday (>= 0.9.0))
Gem google-api-client-0.7.1
    google-api-client-0.7.1 (jwt (>= 0.1.5))
    google-api-client-0.7.1 (launchy (>= 2.1.1))
    google-api-client-0.7.1 (multi_json (>= 1.0.0))
    google-api-client-0.7.1 (rake (>= 0.9.0, development))
    google-api-client-0.7.1 (rake (>= 0.9.0, development))
    google-api-client-0.7.1 (retriable (>= 1.4))
    google-api-client-0.7.1 (rspec (>= 2.11.0, development))
    google-api-client-0.7.1 (signet (>= 0.5.0))
    google-api-client-0.7.1 (uuidtools (>= 2.1.0))

我可以通过在我的 Gemfile 中指定 0.7.1 来解决这个问题,如下所示:

gem 'google-api-client', '0.7.1', :require => 'google/api_client'
gem 'my_baseimage', '0.0.3', :git => 'https://github.com/xxx/BaseImage.git'

但是,我希望在我的项目特定 gem 文件中我不必指定 gem 版本,他们会按原样从 my_baseimage 中获取它们.

当依赖关系图指定我想要的 (0.7.1) 和 my_baseimage 也指定我要的那个(0.7.1)?

Bundler 使用 ruby​​gems,当没有给定特定版本时,默认为标记为 'stable' 的最后一个版本,如果不维护该标签,则可能意味着构建被严重弃用。