2

RVM環境内でRails3.2.1とRuby1.9.2-p290を実行しています

devフォルダー内には、上記を実行しているさまざまなRailsアプリがありますが、個別のgemsetを作成していません。

独自のgemfileを使用して新しいアプリを作成し、バンドルインストールなどを実行しました。元々作業していたメインアプリに戻るまで、すべて問題ありませんでした。

レーキルートを実行すると、エラーが発生します

rake aborted!
You have already activated rake 10.0.3, but your Gemfile requires rake 10.0.2. Using bundle exec     may solve this. 

私は軌道に戻る方法を知っていると思いますが、私が理解していないことは次のとおりです。

.rvm / gems / ruby​​-1.9.2-p290 / gemsフォルダーを見ると、rake-0.8.7、rake-0.9.2.2、rake-10.0.2、の各gemのフォルダーが表示されます。レーキ-10.0.3

したがって、私はrake 10.0.2のバージョンをインストールしており、メインアプリのgemfile.lockはrake(10.0.2)を呼び出し、bundle exec rake routeを実行すると、実際に機能します(おそらく、10.0.2を実行していますか?)。まっすぐなレーキルートを実行する場合、Railsは要求されていない別のバージョンのレーキを実行したいと考えているようです。

だから私の質問は、インストールされたGemの特定のバージョンを呼び出すと、期待どおりに実行されないように見える場合、インストールされたGemのどのバージョンが実際に実行されているかをどのように知ることができますか?

(これとは別に、同じRVMスペース内で異なるアプリを開発している場合は、アプリごとに別々のgemsetを作成する必要があると思いますか?)

4

2 に答える 2

6

この問題はrubygems2.0で修正されています-実行可能なgemをロードするためにGemfileを尊重することができます。

あなたの問題に関しては、RVMは私のgemがインストールされrubygems-bundlerており、可能であれば自動的に依存関係を解決するはずです-適切なバージョンがインストールされていない場合は問題にフォールバックします、その場合は例外を発生させるために状況を変更するチケットがあります-https: //github.com/mpapis/rubygems-bundler/issues/37

bundle install基本的に-プロジェクトで何かを行う前に必ず実行し、rubygems-bundler適切なバージョンのgemが実行されるようにします。

于 2013-01-05T23:17:15.873 に答える
3

問題は、同じgemの複数のバージョンがインストールされている場合、実行するバイナリrakeは常に最新バージョンであるということです。アプリケーションがそのgemの古いバージョンに依存している場合、新しいバージョンがすでにロードされているため、アプリケーションをアクティブ化することはできません。

3つの解決策があります:

  1. これを使用bundle exec rakeすると、常にGemfileのバージョンが使用されます
  2. バンドラーbinstubsを使用します:bundle --binstubs。これにより、./binプロジェクトにフォルダーが作成されます。これで、Gemfileから指定されたgemバージョンのバイナリにアクセスできます。あなたはレーキを呼び出すことができます./bin/rake
  3. バイナリがGemfile内のバージョンを指すように、新しいバージョンをアンインストールします

編集:あなたが言ったように、問題を延期するために別々のジェムセットを作成することもできます。ただし、ブランチでgemを更新してから切り替えると、エラーが発生する場合があります。

于 2013-01-05T19:39:16.250 に答える