为什么捆绑器在未指定版本时需要极其旧版本的gem?

时间:2015-06-17 18:40:44

标签: ruby gem bundler

我有一个如下所示的Gemfile:

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

我有一个基础宝石,需要跨项目的一堆常见宝石。

但是,当我运行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'

但是,我希望在我的项目特定的gemfiles中,我不必指定gem版本,他们只是从my_baseimage原样获取它们。

当依赖图指定我想要的那个(0.7.1)和bundle install时,有人可以建议为什么google-api-client默认为my_baseimage的旧版本。指定我想要的那个(0.7.1)?

1 个答案:

答案 0 :(得分:0)

Bundler使用rubygems,当没有给出特定版本时,默认为标记为“stable”的最后一个版本,如果不维护该标记,则可能意味着甚至非常弃用的版本。