2012-06-04 6 views
7

私はそれぞれのレールプロジェクトに対して別々のrvm gemsetを作成しました。どちらも同じバージョンのruby 1.9.3を使用しています。RVMは異なるGemsetに対して重複したGemをインストールするのはなぜですか?

これにより、bundle installは、両方のプロジェクトに新しい一連の宝石を完全にインストールします。他のプロジェクトが他のgemsetにインストールされているgemと全く同じバージョンを持っているかどうかは関係ありません。私はこれが予想される動作だと推測していますが、ハードドライブのスペースと帯域幅の非効率的な使用のようです。

これらの宝石のいくつかをグローバルジェムセットに手動で移動することができますが、それは退屈なように思えますし、特定のプロジェクトで依存関係が変わった場合にも壊れやすくなります。

gemのバージョンが既にインストールされていて、そのコピーを使用しているときに、rvm autoが検出するより良い方法がありますか?

または、私が使用しているはずのRVMに代わるより優れた方法があります。

答えて

5

これは仕様です。 Gemsetsを使用すると、使用しているライブラリを完全に分離することができ、プロジェクト間で偶然のやりとりが発生しません。あなたが分離株を必要としない場合、あなただけのgemsetせずにインタプリタを使用することができます。

rvm use 1.9.3 

あなたはすべてのプロジェクトで使用するいくつかの宝石がある場合は、単に通訳のグローバルgemsetに切り替える:

rvm use [email protected] 

gem install gemsetに入っているときは、一般的な宝石であり、プロジェクトごとに再インストールされることはありません。

ゲムセットは帯域幅やHDスペースの点では効率的ではありませんが、プロジェクトのすべての依存関係を簡単に吹き飛ばしていつでもゼロから再作成できるので非常に便利です。また、依存関係の誤ったバージョンの変更も完全に排除されます。宝石が好きではない場合は、Gemfileのバージョンを正しく指定すると、それがなくてもかなり遠くまであなたを得ることができます。

代替手段としては、rbenvが私がチェックアウトする主なものです。

関連する問題