1

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) 他に見逃したことはありますか?

4

0 に答える 0