捆绑包和捆绑包更新有什么区别?

时间:2013-06-18 17:09:05

标签: ruby-on-rails ruby-on-rails-3

使用两个命令bundlebundle update

时,我得到两个不同的结果

如果我使用bundle update,我会收到以下错误:

Resolving dependencies...
Bundler could not find compatible versions for gem "railties":
  In Gemfile:
    requirejs-rails (>= 0) ruby depends on
      railties (~> 3.1.1) ruby

    rails (= 4.0.0.rc2) ruby depends on
      railties (4.0.0.rc2)

Bundler could not find compatible versions for gem "rails":
  In Gemfile:
    requirejs-rails (>= 0) ruby depends on
      rails (~> 3.1.1) ruby

    rails (4.0.0.rc2)

但如果我只使用bundle,我会得到以下内容:

Resolving dependencies...
Bundler could not find compatible versions for gem "activesupport":
  In snapshot (Gemfile.lock):
    activesupport (3.2.2)

  In Gemfile:
    rails (= 4.0.0.rc2) ruby depends on
      activesupport (= 4.0.0.rc2) ruby

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

错误指向两个不同的依赖关系问题,但这两个命令都是fetching gem metadata from https://rubygems.org/...Resolving dependencies...,那么它们有何不同?

我一直只使用bundle,但尝试bundle update并注意到差异。

2 个答案:

答案 0 :(得分:9)

  

简而言之:bundle install处理对Gemfile的更改   捆绑包更新升级已由Bundler管理的宝石。

http://viget.com/extend/bundler-best-practices

毋庸置疑bundlebundle install是同一个命令,installbundle的默认选项。

答案 1 :(得分:5)

bundlebundle install相同,后者执行以下操作:

  • 检查Gemfile.lock是否存在。如果是,请安装所有具有指定版本的宝石。
  • 如果锁定不存在,请根据Gemfile使用最新的可用/允许版本安装Gemfile中指定的gem。然后创建Gemfile.lock以记录已安装的版本。
另一方面,

bundle update删除/忽略您的Gemfile.lock并直接进入第二步。

您看到的错误可能是因为某些gem希望active_support处于3.x.x版本范围内,而您似乎正在尝试升级到Rails 4.