最近、Rails 3.1.0.rc4に切り替わり、私たちのCIビルドを実行するのに問題があります。これは、次の単純化された場合に沸く:rails 3.1 db:test: "migrations"問題を準備しました。
-bash-3.2$ echo $RAILS_ENV test -bash-3.2$ bundle exec rake db:drop db:create db:test:prepare You have 21 pending migrations: 20100628174219 InitialSchema 20100706175001 AddCompanyToClassifieds 20100720132917 CartItemActionMigration 20100811192506 AddJobTitleToDirectoryListings ...
私はbundle exec rake db:drop db:create db:migrate db:test:prepare
でそのコマンドを交換した場合、それが正常に動作します。
コアを深く掘ることで、db:test:prepare
タスクはdb:abort_if_pending_migrations
を前提としています。
今私は明らかに何かを見逃していますか、それとも全く無意味ですか? db:test:prepare
(標準の場合)を実行すると、スキーマ.rbを実行するdb:schema:load
が呼び出されます。スキーマはすべての移行を実行せずにスキーマをロードすることになります。すべての移行が実行されていないと実行できないため(つまり、db:test:prepare
より前に強制的にdb:migrate
が強制的に実行されます)、完全に無意味になりませんか?
db:migrate
を私のCIビルドプロセスに追加することができますが、間違っていることを知りたいと思います。
返信いただきありがとうございますが、私は手動で
db:test:prepare
を呼び出しているわけではありません。rake spec
の前提です。私は問題を単純化するために手作業の上にそれを載せました。rake spec
はtest envで実行されているはずなので、db:test:prepare
は開発環境用であると想像しています。 (実際には、データを破壊するので、開発モードで使用することはありません)。返信いただきありがとうございます。 –@David mcCullars: 'activerecord/lib/active_record/railties/databases.rake'を読んで、' db:test:prepare'は開発データを破壊することはなく、開発環境での実行を意図していません'test'名前空間は' test'データベース上で動作します)。 'spec'タスクは私が使っていないので話すことができませんが、テスト環境では実行しないように思えます。 – cam