为什么Bundler在知道gemfile需要特定版本时更新gem

时间:2013-05-08 00:03:31

标签: ruby-on-rails bundler

这似乎发生了很多。我运行捆绑更新或捆绑安装,出于某种原因,我经常会遇到这样的事情:

  

您已经激活了kgio 2.8.0,但您的Gemfile需要kgio   2.7.4。使用bundle exec可以解决这个问题

然后我必须去运行:sudo gem uninstall kgio并选择kgio 2.8.0来卸载它。

如果知道我的gemfile将这些gem锁定到特定版本,为什么bundler甚至会更新gem。我永远不会在gemfile和bundler之外安装gem,所以我不会绕过它的约定。我在我的机器上有另一个项目,但是我很长时间没有在该项目上运行一个bunle更新 - 那里有一些混合吗?这有发生在其他人身上吗?我做错了吗?

2 个答案:

答案 0 :(得分:2)

实际上bundle update指定的gem(所有gems,如果没有指定),忽略Gemfile.lock中指定的先前安装的gems。

bundle install将获取所有远程源,但使用Gemfile.lock中指定的依赖项而不是解析依赖项。

并使用

gem cleanup

此命令将删除(卸载)gem的所有版本,但最新版本除外。

答案 1 :(得分:0)

bundle update,安装较新版本的gem并在Gemfile.lock中声明。 bundle install只是确保您安装了正确的版本。我想你正在为具有不同锁定版本的项目运行捆绑安装。