5

私はレガシーRailsアプリに取り組んでいます。いくつかの新しい宝石をインストールする必要があります。バンドル ツールを使用するように設定されています。ただし、既存の gem を更新するとシステムが無効な状態になるため、単純なバンドル インストールを行うことはできないと警告されました。

では、bundle を使用して、既存の gem に触れずに新しい gem を追加するにはどうすればよいでしょうか?

4

1 に答える 1

4

そうする場合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"

ご覧のとおり、特定のリビジョンでsunspotgem を使用する必要があります。github.com/sunspot/sunspotf5a6b54e8c12a500acf37cfa3b4091bc57b75db0

の場合、 のsunspot_cell_jarsバージョンを使用したい0.4ですsunspot_cell_jars

これによりbundle install、何も混乱することがなくなり、バージョンを完全に制御できます。

于 2013-02-23T17:35:07.903 に答える