web-dev-qa-db-ja.com

バンドルには現在Railsが4.0.4でロックされています

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!

質問:これは予想される動作ですか? 別のユーザーによると、バージョンをロックしているもの が表示されると予想していました。

質問:なぜRailsロックされた?そして、私がしたよりもこの状況に対処するためのより良い方法はありますか?

14
user664833

これは予想される動作ですか?

はい。宝石には依存関係があります。 gemを更新すると、更新された依存関係が取得されます(Railsの場合、たとえば、アクティブな*部分です)。

ちなみに、これは成功したbundle updateの出力です。これは、依存関係の解決に競合がなかったことを意味します。競合があった場合は、代わりにそれが表示されます。 ( 'gemAはgemB v1.2.3を必要としますが、gemCはgemB v4.5.6'を使用します)。

Railsがロックされたのはなぜですか?

Gemfile.lockで指定されているためRailsバージョン4.0.4。バンドルやデプロイなどで使用されるのはこのバージョン(ロックファイルから)です。Gemfileでバージョンを変更するだけでは使用できません。ロードされるgemバージョンに影響します。bundle install/bundle updateが必要です。

更新

便利なリンク: http://viget.com/extend/bundler-best-practices

ルールは次のとおりです。

  1. 常にバンドルインストールを使用する
  2. Bundlerがすでに管理している依存関係をアップグレードする必要がある場合は、bundle updategem_nameを使用してください。
  3. すべてのgemをアップグレードする必要がない限り、バンドル更新を実行しないでください。
17