一年間以上Play frameworkを使ってきて、やっと最近気づいたのでやり方メモ。

Play frameworkはEvolutionという便利なマイグレーションシステムを持っているのですが、Play newしたまま何も手を加えずに使用していると、モデル構成が変更される度にデータベースをクリーンするというすごい動作になってます。

公式ページには1.sql, 2.sql, 3.sql,...と順に実行していくから超便利ですよ!って書いてあるのにこれは謎、ということでやり方を調べました。



1.まず、Ebean DDL generationを停止する

Ebean DDL generationというのは、evolutionのためのSQLを自動生成してくれるEBeanの便利な機能。
ただし、構成が変わる度に全生成してくれちゃうので、毎度データベースがリセットされてしまうという問題が発生します。
なので、これは最初にデータベースを構築した後は止めてしまいます。
1.sqlを開いてみると、
# --- Created by Ebean DDL
# To stop Ebean DDL generation, remove this comment and start using Evolutions
という記述がありますので、記述のとおりに、
# To stop Ebean DDL generation, remove this comment and start using Evolutions
の一行を削除してやります。

2.次に、差分をn.sqlに記述する

マイグレーションスクリプトを作成して、n.sqlという形で1.sqlなどと同じディレクトリにぶちこんでやります。
この際、UpsとDownsを適切に記述する(Upsはデータベースをアップデートする際のスクリプト、DownsはそのUpsを取り消す際のスクリプト)ように気をつけましょう。

3.すると、今後は未適用なsqlから適用されるようになる。

便利。


まぁ、開発環境で実行する場合にはデータベースがリセットされてしまったほうが何かと便利という可能性もありますので、開発中はDDL generationをオンにしておいて、一度リリースしたらDDL generationをオフにして開発する、というのがいいのかなという気がしますね。

参考URL:http://stackoverflow.com/questions/12123052/play-framework-database-issue-with-evolutions