私はレガシーRailsアプリに取り組んでいます。いくつかの新しい宝石をインストールする必要があります。バンドル ツールを使用するように設定されています。ただし、既存の gem を更新するとシステムが無効な状態になるため、単純なバンドル インストールを行うことはできないと警告されました。
では、bundle を使用して、既存の gem に触れずに新しい gem を追加するにはどうすればよいでしょうか?
私はレガシーRailsアプリに取り組んでいます。いくつかの新しい宝石をインストールする必要があります。バンドル ツールを使用するように設定されています。ただし、既存の gem を更新するとシステムが無効な状態になるため、単純なバンドル インストールを行うことはできないと警告されました。
では、bundle を使用して、既存の gem に触れずに新しい gem を追加するにはどうすればよいでしょうか?
そうする場合bundle install
、Bundler は、.xml で明示的に指定された新しい gem または新しいバージョンにのみ関係しますGemfile
。から削除した宝石も削除Gemfile.lock
されますGemfile
。
そうする場合bundle update
、質問で説明した問題が発生します。特に、各 gem に特定のバージョンが指定されていない場合は、既存の gem が更新されます。
より詳細な説明は次のとおりです: http://viget.com/extend/bundler-best-practices . おそらく読みたくなる「INSTALL VS. UPDATE」セクションがあります。
アップデート
gem のバージョンを完全に管理できるようにするために、 で特定のバージョンを参照することをお勧めしますGemfile
。特定のリビジョンを指定することで、Git 参照でも同じことができます。
この投稿sunspot_cell
に基づいて、自分の環境で作業するために最近しなければならなかったことの例:
# The ability to do full document indexing has some "special needs" right now
gem "sunspot", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0"
gem "sunspot_solr", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0"
gem "sunspot_rails", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0", require: "sunspot_rails"
gem "sunspot_cell", git: 'git://github.com/zheileman/sunspot_cell.git', ref: "0c0b7f980b8c46bd272fe0a5a31d2c259bebe36e"
gem "sunspot_cell_jars", "0.4"
gem "progress_bar", "0.4.0"
ご覧のとおり、特定のリビジョンでsunspot
gem を使用する必要があります。github.com/sunspot/sunspot
f5a6b54e8c12a500acf37cfa3b4091bc57b75db0
の場合、 のsunspot_cell_jars
バージョンを使用したい0.4
ですsunspot_cell_jars
。
これによりbundle install
、何も混乱することがなくなり、バージョンを完全に制御できます。