rake
を実行すると、次のエラーが表示されます。
すでにrake 0.9.2をアクティブにしていますが、Gemfileにはrake 0.8.7が必要です。 bundle execの使用を検討してください。
rake
の代わりにbundle exec rake
を使用することはうまくいくようですが、これを修正する最善の方法はありますか?
bundle exec
を使用するのはこれを行う正しい方法です。
基本的には、rakeを0.9.2に更新したため、Gemfileで指定されているバージョンと競合しています。以前はrake
の最新バージョンがGemfileのバージョンと一致していたため、単にrake
を使用しても警告は表示されませんでした。
Yehuda Katz(元のBundler開発者の1人)は、すべてを このブログ投稿 で説明しています。
bundle exec ...
を常に入力しないようにするには、Bundlerでよく使用するコマンドのシェルにエイリアスまたは関数を設定できます。たとえば、これは私がRakeに使用しているものです:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
rakeの現在のバージョンを保持する理由がある場合(または他のgemが問題を引き起こしている場合)、 matt は正しい、これを行う最良の方法はbundle exec
を実行することです。これは、インストールしたgemの最新バージョンを使用する代わりに、Gemfileで指定されたバージョンを使用します。 (nathan.f77には良い解決策があります 下 rakeを実行するたびにbundle exec
と入力したくない場合)
それ以外の場合、rakeを更新しない理由がない場合は、実行できます
bundle update rake
これにより、実際にGemfile.lockが更新され、毎回bundle exec
を実行する代わりに、最新バージョンのrakeが使用されます。
注:bundle update
だけを実行すると、rakeの代わりにGemfileのすべてのgemが更新されます。アプリケーションで何かが壊れた場合、どのgemの更新が原因かわからないためです。
bundle exec
を使用せずに古いバージョンを保持するあまり推奨されない方法は、rakeの新しいバージョンをアンインストールすることです。
$ gem uninstall rake アンインストールするgemを選択: 1. rake-0.8.7 2. rake-0.9.2 3.すべてのバージョン > 2 rake-0.9.2 が正常にアンインストールされました
これは機能しますが、異なるバージョンのrakeを使用する複数のアプリを使用している場合、異なるバージョンをインストールおよびアンインストールする必要があるため、これは苦痛になります。
bundle clean --force
このバンドルにないすべてのシステムgemを削除します
これが私に最後に起こったとき、私はすべての宝石を更新していました。 gem uninstall rake
を実行し、バージョンオプションをリストしました。新しいものを選んだので、bundle exec
を使用する必要がなくなりました。
基本的に、bundle exec
を使用すると、バンドルによってインストールされているgemバージョンが使用されるため、Gemfileに含まれるものが使用されます。 bundle exec
がなければ、システムのデフォルトのバージョンが使用されます。
bundle exec
は正しいですが、毎回入力する必要はありません。
これを.bashrcに入れることができます:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
ああ! Katzの記事は素晴らしいです!
私はこのソリューションが最も好きです:
bundle install --binstubs
入力できるように
bin/rake .stuff.
2.3と3.0.9の両方のアプリを開発している私のような人にとって、これは私をとても気分が良くさせます。