Help us understand the problem. What is going on with this article?

bundle updateで特定のgemのみ更新する

More than 5 years have passed since last update.

概要

既存のbundlerを使ったプロジェクトを立ち上げる時、通常は、 bundle とするだけで、 Gemfile.lock の内容に沿って gem がインストールされる。これは非常に便利。

ただ、特定の gem がOSのバージョン等によりインストールが失敗してしまうことがある。(例えば、 therubyracer とか libv8 などの gem)

この時、次のようにすれば、最新のOSで動作する状況には持っていけるはず。
(※その gem が常に最新のOSに追随しているとき)

bundle update

しかし、この方法では、目的外の gem まで更新してしまうことがあり、
それによって、アプリケーションが予期しないエラーを吐いたりすることがある。

(※最新の gem でも動くようにするべきだという指摘はあるかもしれないが、今回とは別問題)

方法

実は、 bundle update は gem の名前をオプションとして渡すと、その gem だけをupdate してくれる。
ちなみに、man によると、複数指定もできる。

bundle update therubyracer

そして、Gemfile.lock ファイルが更新される。

注意点

ただし、上記の方法だと依存関係にあるものも同時に更新されてしまうので注意。

依存関係を更新しないためには次のようにすればいいらしい(未確認)

bundle update --source therubyracer

参考情報

http://stackoverflow.com/questions/11263150/update-just-one-gem-with-bundler
http://bundler.io/v1.7/man/bundle-update.1.html

toshi_dev
コンテンツは引き続き残しますが放置とさせていただきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away