更新後にどのようにGemfileのすべての宝石と互換性を保つのですか?

私の質問は既にこちらにお願いしていますが、その理由を理解しようとしていますそれを回避する方法とは対照的です。

私が得たエラーは、

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.

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

EDIT:
All my gems for my app are in a gemset, and I have updated my gems again. Should an update not make sure that related gems are compatible?

15

3 答え

これはあなたのシステムに、Railsアプリケーションのものよりも新しい最近の宝石をインストールするときに起こります。

BundlerはあなたのGemfileの状態に固執する必要があることを単にouに伝えます。

これが実行の目的です。

bundle exec rake db:migrate

-> running the very same rake version your Gemfile provides.

gemfileから宝石を更新することについては、次のようにしてください:

bundle update

この種の退屈なものを避ける最も簡単な方法は、宝石を作成して宝石を孤立させることです。私はこの目的のためにRVMを使用します。

34
追加された
あなたは専用の宝石を持っていますか?それをロードする .rvmrc ファイルがありますか?あなたはグローバルなgemsetが空ですか?
追加された 著者 apneadiving,
1.テストしたいgemsetを使う: rvm gemset use foo 。 2.内側に宝石をリストします: gem list
追加された 著者 apneadiving,
私は本当にrvmを使っています。私はgemsetを持っています。このエラーは、 "annotate"宝石(私が持っていたバージョンはRails 3.1と互換性がありません)を更新したいのでで "$ bundle update"を実行しました。私は "$ bundle update"を実行すると、Gemfile.lock内のすべてのgemが更新され、バージョン番号がないので最新のものに更新されるという印象を受けました。私は、rspecがすべての関連する宝石を互換性のあるものに更新することを期待しました。私が間違っている?
追加された 著者 Theo Scholiadis,
.rvmrcファイルにgemsetをロードしています。私はグローバルに宝石をインストールしていません。それをどのようにチェックするのですか?
追加された 著者 Theo Scholiadis,
ありがとう。グローバルジェムセットは空です。私はそれを空にしたので、私は自分のレールアプリの宝石に宝石しか持たないようにしたことを覚えています。
追加された 著者 Theo Scholiadis,
私の場合、私が宝石リストを作るとき、私はレーキを得る(0.9.2.2、0.9.2)。 0.9.2.2をgem uninstall rakeでアンインストールしているようです。私のgemsetから0.9.2.2を削除する方法はありますか?
追加された 著者 c3rin,

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

たとえば、バージョン0.9.2と0.9.2.2を含む2つのレーキ・ジェムがある場合、レイク・バージョン '0.9.2'を指定してインストールしますが、ブーミング・エラー以外のタスクは実行しません

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

Gemfile.lockにgemfile.lockをロックし、rake 0.9.2を選択するバンドルのインストールを期待していますが、デフォルトでrake 0.9.2.2が有効になっているgemsetを参照しています。

バンドルインストールの目的を、レールブックを使ったアジャイルWeb開発から思い出させるだけで、

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

そのようには機能しませんが、

rake 0.9.2.2をアンインストールしてrake 0.9.2を使用するか、またはbundle update rakeを使用して、Gemfile.lockのレーキバージョンを0.9.2.2に更新します

1
追加された
けっこうだ。しかし、私はなぜこのような理由でGemfileにバージョン番号がないので、必要なすべての宝石を自動的に更新しなかったのだろうと思っていました。これは、すべてのインスタンスではなく、特定の問題に対する適切な回避策です。
追加された 著者 Theo Scholiadis,

@apneadivingが言っているように、 "$ bundle install"を実行すると、すべてのbunldesが更新されます。しかし、 "$ bundle install --binstubs"を実行した後、 "bundle exec"の部分を省略すると、互換性のない宝石にはまだエラーが出ます。

その後、別の宝石を追加してGemfileを更新する必要がありました。私は、非互換性が宝石のクリエイターによって解決されたと仮定しています。

0
追加された