回答:
これを行うにbundle exec
は、使用が正しい方法です。
基本的に何が起こっているのかというと、rakeを0.9.2に更新したため、Gemfileで指定されたバージョンと競合することになります。以前は最新バージョンがrake
Gemfileのバージョンと一致していたため、単にを使用しても警告は表示されませんでしたrake
。
Yehuda Katz(元のBundler開発者の1人)は、このブログ記事ですべてを説明しています。
bundle exec ...
いつもタイプしなくても済むように、Bundlerで一般的に使用するコマンドのエイリアスまたは関数をシェルに設定できます。たとえば、これは私がレイクに使用するものです:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
現在のバージョンのrake(または他のgemが問題を引き起こしているもの)を保持する理由がある場合、mattは正しく、これを実行する最善の方法はを実行することbundle exec
です。これは、インストールした最新バージョンのGemではなく、Gemfileで指定されたバージョンを使用します。(rakeを実行するたびに入力したくない場合は、nathan.f77に以下の良い解決策がありますbundle exec
)
そうでなければ、rakeを更新しない理由がない場合は、
bundle update rake
これにより、bundle exec
毎回実行する必要がなく、実際にはGemfile.lockが更新され、最新バージョンのrakeが使用されます。
注:bundle update
これだけを実行すると、rakeだけでなくGemfile内のすべてのgemが更新されます。これはおそらく望んでいることではありません。アプリケーションで何かが壊れた場合、どのgem更新が原因であるかわからないためです。
使用せずに古いバージョンを保持するためのあまり推奨されない方法bundle exec
は、rakeの新しいバージョンをアンインストールすることです。
$ gemアンインストールレーキ アンインストールするgemを選択: 1. rake-0.8.7 2. rake-0.9.2 3.すべてのバージョン > 2 rake-0.9.2が正常にアンインストールされました
これは機能しますが、異なるバージョンのrakeを使用する複数のアプリを使用している場合、異なるバージョンを常にインストールおよびアンインストールする必要があるため、これは面倒な場合があります。
gem install rake
。次にgem uninstall rake
、0.9.2を選択しました。
bundle update
また、バージョンが指定されていないすべてのgemを利用可能な最新バージョンに更新します。それはあなたが望むものではないかもしれません。bundle update rake
より正確になります。
public_suffix
代わりに同じ問題がありrake
ます。bundle update public_suffix
残念ながら、実行しても効果はありません。
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; }