2011-07-14 18 views
3

最近、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ビルドプロセスに追加することができますが、間違っていることを知りたいと思います。

答えて

0

私はdb:test:prepareはTEST環境で実行するつもりはないと信じています(そうしないと、自分でdb:schema:loadを実行できます)。通常、開発環境でdb:test:prepareを実行します。保留中の移行のチェックは非常に便利です(複数のテストを実行して失敗する前に同僚が新しい移行を行ったかどうかは分かります)。テストを実行するととdb:test:prepareが実行されるため、手動で実行する必要はほとんどありません(CIビルドではありません)。 db:test:prepareへの呼び出しを省略します。

+0

返信いただきありがとうございますが、私は手動でdb:test:prepareを呼び出しているわけではありません。rake specの前提です。私は問題を単純化するために手作業の上にそれを載せました。 rake specはtest envで実行されているはずなので、db:test:prepareは開発環境用であると想像しています。 (実際には、データを破壊するので、開発モードで使用することはありません)。返信いただきありがとうございます。 –

+0

@David mcCullars: 'activerecord/lib/active_record/railties/databases.rake'を読んで、' db:test:prepare'は開発データを破壊することはなく、開発環境での実行を意図していません'test'名前空間は' test'データベース上で動作します)。 'spec'タスクは私が使っていないので話すことができませんが、テスト環境では実行しないように思えます。 – cam

関連する問題