LoginSignup
139
93

More than 3 years have passed since last update.

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

Last updated at Posted at 2015-02-10

概要

既存の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

追記:
コメントで教えたいただきましたが、現在は --source を使うのではなく、 --conservative を使うのが正しいとのことです。参考にあげていた stackoverflowの方も更新されています。

bundle update --conservative therubyracer

参考情報

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

蛇足

問題が生じた状況や例示しているgemたちも変更したいところだが。

139
93
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
139
93