15

私の質問はすでにここで尋ねられていますが、それを回避する方法ではなく、その背後にある理由を理解しようとしています.

私が得たエラーは次のとおりです。

You have already activated rspec-core 2.7.1, but your Gemfile requires rspec-core 2.6.4. Using bundle exec may solve this. (Gem::LoadError)

現在、「mpapis-bundler」を使用したり、「bundle exec」の省略形を作成したりするなど、さまざまな解決策が与えられていますが、それが何であるかという印象を受けました

$bundle install --binstubs

のためでした。

より具体的には、rspec-rails の gemfile にバージョン番号が記載されていないのに、なぜこの非互換性があるのでしょうか? 私が試したときに私のエラーも発生しました

$rake db:migrate

それを教えて

You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. Consider using bundle exec.

説明をいただければ幸いです。

編集:
アプリのすべての宝石は宝石セットにあり、宝石を再度更新しました。関連する gem に互換性があることを更新で確認する必要はありませんか?

4

3 に答える 3

34

これは、Rails アプリよりも新しい gem をシステムにインストールした場合に発生します。

Bundler は単に、Gemfile の状態に固執する必要があることを伝えるだけです。

これが実行の目的です:

bundle exec rake db:migrate

-> Gemfile が提供するものとまったく同じ rake バージョンを実行します。

gemfile からの gem の更新に関しては、単純に次のようにします。

bundle update

この種の退屈なことを避ける最も簡単な方法は、gemset を作成して gem を分離することです。この目的で RVM を使用します。

于 2011-10-27T16:04:45.693 に答える
1

rake バージョン 0.9.2.2 に関しては、どちらの方法も、プロジェクト用に新しい gemset を作成し、Gemfile に一致する gem バージョンを維持することです。

たとえば、バージョン 0.9.2 と 0.9.2.2 を含む 2 つの rake gem がある場合、rake バージョン '0.9.2' を指定するとインストールされますが、ブローイング エラー以外のタスクは実行されません。

'既に rake 0.9.2.2 を有効にしていますが、Gemfile には rake 0.9.2 が必要です。bundle exec を使用すると、これを解決できる場合があります。

bundle install は Gemfile.lock で gem バージョンをロックし、rake 0.9.2 を選択すると予想しますが、デフォルトで rake 0.9.2.2 が有効になっている gemset に見えます。

rails book を使ったアジャイル Web 開発から bundle install の目的を思い出すだけで、

'bundle install は Gemfile.lock を開始点として使用し、このファイルで指定されているさまざまな gem のバージョンのみをインストールします。このため、このファイルをバージョン管理システムにチェックインすることが重要です。これにより、同僚と展開ターゲットがすべてまったく同じ構成を使用することが保証されます。

しかし、それはそのようには機能しません。

rake 0.9.2.2 をアンインストールして rake 0.9.2 を使用するか、bundle update rake を使用して、Gemfile.lock の rake バージョンを 0.9.2.2 に更新することをお勧めします。

于 2012-04-12T14:50:20.603 に答える
0

@apneadiving が言ったように、「$bundle install」を実行すると、すべてのバンドルが更新されます。ただし、「$bundle install --binstubs」を実行した後でも、「bundle exec」部分を省略した場合は常に、互換性のない gem のエラーが発生します。

その後、別のgemを追加したときにGemfileを更新する必要がありましたが、今では機能しています。非互換性は gem 作成者によって解決されたと思います。

于 2011-11-07T09:41:50.617 に答える