捆绑更新降级了宝石

时间:2015-09-03 20:55:13

标签: gem bundler

我的应用程序中有一个令人讨厌的错误,导致我的HTML中出现静态代码。经过长时间的追捕和尝试,我终于找到了导致错误的原因。

问题在于链轮版本。在我的Gemfile.lock中我有

sprockets 3.2.0)

然后我的应用程序工作正常。但当我bundle update版本更改为

sprockets (2.12.4)

然后出现错误。所以现在我必须在捆绑更新后手动将链轮版本更改为3.2.0。

那么为什么捆绑更新会将我的链轮版本更改为旧版本?我使用的是Bundler的最新版本。

更新。

我刚刚将capistrano gem添加到我的gemfile

gem 'capistrano', '~> 3.1.0'
gem 'capistrano-bundler', '~> 1.1.2'
gem 'capistrano-rails', '~> 1.1.1'

# Add this if you're using rbenv
gem 'capistrano-rbenv', github: "capistrano/rbenv"

并尝试进行捆绑安装,但现在我又收到了其他错误,

Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 3.2.0)

  In Gemfile:
    sprockets (< 4.0, >= 2.8) ruby

    angular-rails-templates (>= 0) ruby depends on
      sprockets (~> 2) ruby

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

我运行bundle update并且在修复错误时,静态HTML的错误又回来了,因为bundler将gem降级为sprockets(2.12.4)。

在Gemfile.lock中将链轮重新更改回3.2.0可修复该错误。但是必须对这种行为作出解释。正确?

1 个答案:

答案 0 :(得分:0)

Bundler寻找具有可以满足的依赖关系的版本。

当然,降级gem可能也会导致其他人降级,但是如果无法升级,则升级gem也可能会导致另一个gem降级。

如果升级Rails,看到宝石被下载并不少见。降级的库版本可能不依赖于已升级的库(例如,主动支持等)。

这就是为什么通常版本会降至0.0.x之类的原因。