なぜbundle exec rails db:migrateなのか

どうしてbundleが必要なのか調べたのでメモ bundle execは、現在のバンドル(ディレクトリのGemfileからのもの)のコンテキストでスクリプトを実行するためのBundlerコマンド。

実は、bundlerもgemの一つ rails db:migrateはスクリプトで、dbは名前空間で、migrateは定義されたタスク名。 したがって、exec rake db:migrateをバンドルすると、現在のバンドルのコンテキストでdb:migrateコマンドを使ってrailsスクリプトが実行されます。

詳しくはbundlerの本家サイトを見てください

場合によっては、実行可能ファイルがすでにシステムにインストールされ、競合しないなら問題なく利用できます。 将来、または別のマシンで動作しない可能性があります。 これはデプロイ時に動かくなくなる可能性もあるということ。 これはあまりにリスクが高すぎる。 よってめんどくさくても, bundle execは必ず書きましょう! 以上