2016-12-05 12 views
0

Deployerを使用してSymfonyアプリケーションを本番環境にデプロイしています。すべては、しかし、私のdeploy.phpファイルは、データベースの移行のためのコマンドがあり、正常に動作している:デプロイヤを使用してデプロイを実行中にマイグレーションがあるかどうかを確認するには

/** 
* Run a diff to generate migrations, 
*/ 
task('database:diff', function() { 

run('{{bin/php}} {{release_path}}/' . trim(get('bin_dir'), '/') . '/console doctrine:migrations:diff --env={{env}} --no-debug --no-interaction'); 

})->desc('Generate migrations database'); 

... 

after('deploy:symlink','database:diff'); 
after('database:diff','database:migrate'); 

しかし、データベースへの変更がない場合は、このステップでは、エラーが発生します。

エラーメッセージ:私はすべてのデータベースの変更をチェックし、変更がある場合のみ、条件付きの移行タスクを実行することができますいくつかのコードを探しています

[RuntimeException]                                              

[Doctrine\DBAL\Migrations\MigrationException]                                       
Could not find any migrations to execute. 

答えて

3

これは、マイグレーションとデータベースのバージョン管理を自動化するための奇妙なアプローチです。

すべての開発者が移行を生成します。

  1. 追加/ $ php app/console doctrine:migrations:diff 移行がローカルに作成され
  2. 実行して、エンティティのフィールドを削除する(または新しいエンティティを作成します)。
  3. その後、開発者はその移行を開いてすべての問題を解決するか、追加の移行クエリ/移行などを追加します。
  4. その後、彼はすべての移行がgitによってバージョン管理されるようにリポジトリにコミット/プッシュします。
  5. 他の開発者がこれらの移行をプルし、必要に応じてローカルマシンで実行します。配備中

あなただけの最新バージョンにあなたのprodデータベースを更新するためにdatabase:migrateを実行するように、すべての差分は、gitリポジトリにあるため、差分を実行する必要は、ありません。

ヒント:大規模な移行で一部のSQLクエリが失敗するように、エンティティ/データベーステーブルごとに1つの移行を生成することをお勧めします。実行済みのものをロールバックすることは困難です。

+1

私はこのアプローチに関する簡単な質問がありますか?私は非常に似ていますが、私は不思議に思っていました...あなたはどのように展開を使用してロールバックを実行するのですか?つまり、私たちが展開したばかりのバージョン5、2つの移行が実行されたと仮定して、バージョン4にロールバックしたいのですが、これは何とか自動化されていますか? – user1970395

関連する問題