降级gem时,bundle可以自动降级gem的依赖关系吗?

时间:2012-08-13 22:02:14

标签: ruby gem dependencies bundler downgrade

之前我在Gemfile中为我的Rails项目更改了一个gem版本。我运行了bundler update gemname,这安装了几个依赖项的更新版本,这让我很吃惊。

现在,我需要降级到旧版本的gem。我已经在我的Gemfile中更改了版本,并再次运行bundler upgrade gemname(并且很好地测量了bundler),但是现在之前升级的gem(依赖项)仍然是较新的版本(我猜是宝石)没有指定版本,所以它只是使用最新的?)。

有没有办法在升级gem之前将这些依赖项降级回原来的位置?

3 个答案:

答案 0 :(得分:3)

您始终可以在Gemfile中指定具有所需版本号的从属宝石。这将迫使bundler重新评估依赖关系并根据需要降级它们。它并不理想,但是一旦版本自行排序,您将能够在将来删除指定的宝石。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我会将此作为评论添加,但我不能因为我的声誉,所以我希望有人觉得这很有用。

我也做了nmott建议的内容。 只需在Gemfile中添加依赖项,例如: gem 'gem-name', '~> 1.5.0'

并运行bundle update gem-name

然后当您的依赖项降级时,从Gemfile中删除该行并保持原来的状态。