1

ドキュメントに従って、すでにかなりの数のテーブルがあり、本番環境で実行されている既存のプロジェクトでデータベース移行プラグインを動作させることができました。ローカルで次のプロセスを実行しました。

Pulled down latest production database
Source production database to local dev
grails dbm-generate-changelog changelog.groovy
grails dbm-changelog-sync
grails dbm-gorm-diff 2012-06-25-latest.groovy --add
grails dbm-update

将来の変更セットを適用する段階に到達するために、これらのそれぞれをローカルで実行しなければならなかった理由を理解しています。しかし、今度はテスト サーバーの 1 つで 2012-06-25-latest.groovy を実行したいと考えています。本番データベースに基づく最新のデータベースがすでにあります。

dbm-update を実行しようとしましたが、同期がないと、既に存在するテーブルの作成に失敗しました。そのため、dbm-changelog-sync を実行しましたが、dbm-update を実行すると、実際には最新のファイルが適用されませんでした。

コンテキスト (タグ) を変更セットに追加して、dbm-update を実行するときにそのコンテキストを指定できることはわかっていますが、これが唯一の方法なのか、それともワークフローを変更する必要があるのか​​を知りたいです。変更ログをテスト サーバーに適用する最良の方法は何ですか?

4

1 に答える 1

0

私がやったことは、FILENAME = '2012-06-25-latest.groovy' である DATABASECHANGELOG テーブルのすべての行を削除することです。次に dbm-status を実行したところ、256 個の変更が待機中であることがわかりました。次に、dbm-update を実行しましたが、すべて問題ありません。

これがどのように行われることになっていたかはわかりませんが、うまくいったようです。

更新: これに加えて、おそらく空のデータベースで移行全体を実行してから、INSERT ステートメントのみを使用して運用データベースの mysqldump を実行できます。

于 2012-06-25T15:10:13.100 に答える