为什么Bundler拒绝接受没有指定版本的gem?

时间:2018-03-19 21:47:57

标签: ruby-on-rails bundler

命令:

bundle update

错误:

Bundler could not find compatible versions for gem "fog-core":
  In Gemfile:
    fog was resolved to 2.0.0, which depends on
      fog-google (<= 0.1.0) was resolved to 0.1.0, which depends on
        fog-core

    fog was resolved to 2.0.0, which depends on
      fog-internet-archive was resolved to 0.0.1, which depends on
        fog-core (~> 1.45)

Bundler一直发现没有指定版本的fog-corefog-core (~> 1.45)不兼容。我认为.gemspec文件中没有版本意味着任何版本都可以接受,但似乎并非如此。

在尝试升级fog-aws版本后,对于一个非常大的项目,Bundler版本1.16.1就会发生这种情况。

到目前为止,我的解决方案是分配每个依赖项,进行以下更改:

--- a/foo.gemspec
+++ b/foo.gemspec

-  spec.add_dependency "fog-core"
+  spec.add_dependency "fog-core", "~> 1.45"

......但这是一个愚蠢的事情。必须有更好的方法。

1 个答案:

答案 0 :(得分:1)

经过一天半的单步穿过Bundler,我得到了答案:

如果发生以下两种情况:

  1. 在找到合适的版本之前,Bundler会查看包的冲突版本(例如librato-metrics)。
  2. 在#1之前或之后发生任何类型的错误。
  3. ... Bundler将显示已解决的冲突错误以及所有其他错误,即使冲突已实际解决且无需解决。