Posted at

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

More than 3 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