概要
既存の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たちも変更したいところだが。