该捆绑目前的铁轨锁定在4.0.4

时间:2014-05-27 05:34:02

标签: ruby-on-rails ruby-on-rails-4 bundle upgrade gemfile

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 已锁定?还有比我更好的处理这种情况的方法吗?

1 个答案:

答案 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版本。 bundle install是必需的。

更新

有用的链接:http://viget.com/extend/bundler-best-practices

  

以下是规则:

     
      
  1. 始终使用捆绑安装
  2.   
  3. 如果您需要升级Bundler已经管理的依赖项,请使用bundle update gem_name。
  4.   
  5. 除非您希望升级所有宝石,否则不要运行捆绑包更新。
  6.