2012-08-13 45 views
2

之前我在Gemfile中为我的Rails项目更改了一个gem版本。我运行了捆绑器更新gemname,并且安装了多个依赖关系的最新版本,这让我很惊讶。降级宝石时,捆绑商可以自动降级宝石的相关性吗?

现在,我需要降级到老版本的宝石。我已经将版本更改回Gemfile中,并再次运行bundler upgrade gemname(和捆绑器安装以获得更好的效果),但现在先前升级的gem(依赖项)仍然是较新的版本(我猜想gem没有指定版本,所以它只是使用最新的?)。

有没有办法在升级宝石之前将这些依赖关系降级回原来的位置?

回答

2

如果依赖gem没有指定它,Bundler无法知道依赖gem的最大版本。除非降级gem实际上改变了它的依赖关系,否则唯一真正的选择是从版本控制中检出以前版本的gemfile.lock。否则,你不能做你想做的事; Bundler将尊重你当前的gemfile.lock,除非你的gem的依赖关系在降级时改变,否则它不会改变。

3

您可以随时在Gemfile中指定相关的gem和所需的版本号。这将强制bundler重新评估依赖关系并根据需要降级它们。这并不理想,但一旦版本自行排除,您将能够在将来删除指定的宝石。

0

我会添加这个作为评论,但我不能因为我的声望,所以我希望有人认为这有用。

我也做了什么nmott建议。 只需添加依赖于你的Gemfile,例如: gem 'gem-name', '~> 1.5.0'

和运行bundle update gem-name

那么当你的依赖被降级,从Gemfile中删除行,并保持它,因为它本来是。