我有一个如下所示的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)?
答案 0 :(得分:0)
Bundler使用rubygems,当没有给出特定版本时,默认为标记为“stable”的最后一个版本,如果不维护该标记,则可能意味着甚至非常弃用的版本。