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

use*_*833 12 bundle ruby-on-rails upgrade gemfile ruby-on-rails-4

Gemfile我做了以下改变:

-bash> git diff Gemfile
...
-gem 'rails', '4.0.4'
+gem 'rails', '4.0.5'
Run Code Online (Sandbox Code Playgroud)

然后我跑了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`
Run Code Online (Sandbox Code Playgroud)

然后我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!
Run Code Online (Sandbox Code Playgroud)

问题:这是预期的行为吗?根据另一个用户,我希望看到什么锁定版本.

问题:为什么被rails 锁定?还有比我更好的处理这种情况的方法吗?

Ser*_*sev 16

这是预期的行为吗?

是.宝石有依赖性.更新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/ bundle update是需要的.

更新

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

以下是规则:

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

  • 好的,我必须跟进。我只想提及我在讲话时应有的尊重,我真诚地重视您的回答和评论。您对“为什么要锁定rails?*”的答案是*因为`Gemfile.lock`指定了rails版本`4.0.4`。*嗯,每个宝石都在`Gemfile.lock`中指定了版本。例如,我看不到“ rails”和“ passenger”之间的区别,但是“ rails”需要“捆绑包更新轨道”来进行更新,而“ passenger”只需安装“捆绑包”就可以了。注意:我对`Gemfile`中的每个gem除了`rails`以外都使用`〜>`。但是`jquery-rails`再次说它被“锁定”了。这么奇怪。 (2认同)