Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
91
Help us understand the problem. What are the problem?

posted at

updated at

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

概要

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

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
91
Help us understand the problem. What are the problem?