我的应用程序中有一个令人讨厌的错误,导致我的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可修复该错误。但是必须对这种行为作出解释。正确?
答案 0 :(得分:0)
Bundler寻找具有可以满足的依赖关系的版本。
当然,降级gem可能也会导致其他人降级,但是如果无法升级,则升级gem也可能会导致另一个gem降级。
如果升级Rails,看到宝石被下载并不少见。降级的库版本可能不依赖于已升级的库(例如,主动支持等)。
这就是为什么通常版本会降至0.0.x之类的原因。