在Gemfile
我做了以下更改:
-bash> git diff Gemfile
...
-gem 'rails', '4.0.4'
+gem 'rails', '4.0.5'
然后我跑了bundle
并收到一条停止播放的消息:
-bash> bundle
Fetching gem metadata from https://rubygems.org/........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
You have requested:
rails = 4.0.5
The bundle currently has rails locked at 4.0.4.
Try running `bundle update rails`
然后按照上面的消息运行了bundle update rails
,得到了以下内容(请注意我正在跳过没有更改的行)。
-bash> bundle update rails
Fetching gem metadata from https://rubygems.org/........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Installing rake 10.3.2 (was 10.3.0)
Installing multi_json 1.10.1 (was 1.9.2)
Installing activesupport 4.0.5 (was 4.0.4)
Installing actionpack 4.0.5 (was 4.0.4)
Installing actionmailer 4.0.5 (was 4.0.4)
Installing activemodel 4.0.5 (was 4.0.4)
Using activerecord-deprecated_finders 1.0.3
Installing activerecord 4.0.5 (was 4.0.4)
Installing railties 4.0.5 (was 4.0.4)
Installing rails 4.0.5 (was 4.0.4)
Your bundle is updated!
问题:这是预期的行为吗? According to another user, I expected to see what is locking the version
问题:为什么rails
已锁定?还有比我更好的处理这种情况的方法吗?
答案 0 :(得分:15)
这是预期的行为吗?
是。宝石有依赖性。当您更新gem时,它会获得更新的依赖项(例如,在rails的情况下,它是活动的*部分)。
顺便提一下,这是成功bundle update
的输出。这意味着依赖解析没有冲突。如果发生冲突,您可以看到相反的情况。 (像宝石A需要宝石B v1.2.3,但宝石C使用宝石B v4.5.6')。
为什么导轨被锁定?
因为Gemfile.lock指定了rails 4.0.4版。这个版本(来自锁定文件)将由bundler,部署等使用。简单地更改Gemfile中的版本不会影响加载哪个gem版本。 1}} / bundle install
是必需的。
有用的链接:http://viget.com/extend/bundler-best-practices
以下是规则:
- 始终使用捆绑安装
- 如果您需要升级Bundler已经管理的依赖项,请使用bundle update gem_name。
- 除非您希望升级所有宝石,否则不要运行捆绑包更新。
醇>