MySQL インスタンス上に Scala Play アプリがあります。進化をconf/evolutions/$db/$step.sql
ファイルとして保存します。ただし、一部のテーブルは動的です。つまり、スキーマは Play アプリの実行中に変更される可能性があります。これらのテーブルを Play の進化フレームワークから除外する最善の方法は何ですか?
いくつかの選択肢がありますが、特にエレガントに見えるものはありません。
1) 問題のあるすべてのテーブルを、evolutions プラグインが無効になっている別のデータベースに移動します。現在のデータベースからも外部キー制約を持つすべての関連テーブルを移動する必要があるため、これはそれほど素晴らしいことではありません。
2) 何らかの方法で Play の進化フレームワークをオーバーライドする - 残念ながら、Play の進化フレームワークはモジュール化されておらず、拡張可能でもありません。def onUp(tableName: String)
Scala または Java のフックがいくつかあり、それをオーバーライドできることを期待していましdef onDown(tableName: String)
たが、Play の進化フレームワークにはそのような優れた抽象化がなく、非常にモノリシックに見えます。
3) Play が という名前のテーブルにエントリを作成することは知ってplay_evolutions
います。そのテーブルをアプリから変更してonStart
、問題のあるすべてのテーブル関連のものを手動で削除できます。それは機能しますが、非常にハックであり、Play の内部表現/スキーマ変更の処理に強く依存しています。
4)問題のあるすべてのテーブルSQLステートメントを次の場所に移動するだけconf/evolutions/$db/ignore_evolution_$step.sql
です-このようにして、これらのテーブルは進化フレームワークの注意深い目から外れていますが、基本的には独自のフレームワークをロールしてこれらのファイルを解析して実行する必要があります.
5) 他に見逃したことはありますか?