2014年5月1日木曜日

Play FrameworkのSlickのevolutionでカラム追加

Play FrameworkのSlickのevolutionで管理してるテーブルにカラムを追加してみました。

バージョン
Play Framework 2.2.2
slick 2.0.1
play-slick 0.6.0.1

前回作ったclassに変数upd_dateとcountを追加
case class Twitter(id: Int, word: String, ins_date: Date, upd_date: Date, count:Int)

class Twitters(tag: Tag) extends Table[Twitter](tag,"twitter"){
  def id = column[Int]("id",O.PrimaryKey,O.AutoInc)
  def word = column[String]("word",O.NotNull)
  def ins_date = column[Date]("ins_date",O.NotNull)
  def upd_date = column[Date]("upd_date",O.NotNull)
  def count = column[Int]("count",O.NotNull)
  def * = (id,word,ins_date,upd_date,count) <> (Twitter.tupled,Twitter.unapply)
}
その他、呼び出し元や取得先など関係するところを修正する。
アプリケーションを起動してhttp://localhost:9000/にアクセスするとコンソールに以下が表示

[info] Compiling 2 Scala sources to /Users/xxxx/play/sample/target/scala-2.10/classes...
[info] Compiling 4 Scala sources to /Users/xxxx/play/sample/target/scala-2.10/classes...
[info] play - database [default] connected at jdbc:h2:file:database/play
[info] o.r.Reflections - Reflections took 107 ms to scan 1 urls, producing 9 keys and 10 values 
[error] application - ! @6i1gdpfi5 - Internal server error, for (GET) [/] -> 
play.api.db.evolutions.InvalidDatabaseRevision: Database 'default' needs evolution![An SQL script need to be run on your database.]
 at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1$$anonfun$apply$1.apply$mcV$sp(Evolutions.scala:486) ~[play-jdbc_2.10.jar:2.2.2]
 at play.api.db.evolutions.EvolutionsPlugin.withLock(Evolutions.scala:507) ~[play-jdbc_2.10.jar:2.2.2]
 at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:461) ~[play-jdbc_2.10.jar:2.2.2]
 at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:459) ~[play-jdbc_2.10.jar:2.2.2]
 at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-library.jar:na]
 at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:459) ~[play-jdbc_2.10.jar:2.2.2]
[info] a.e.s.Slf4jLogger - Slf4jLogger started

画面上に以下のものが表示される。
Database 'default' needs evolution!
An SQL script will be run on your database - [Apply this script now!]

[Apply this script now!]ボタンを実行すると正常な画面が表示される。
テーブルにカラムも追加されている。
alterではなくて、dropしてcreateしてる模様
コンソールには以下が表示される。
[info] c.j.b.BoneCP - Shutting down connection pool...
[info] c.j.b.BoneCP - Connection pool has been shutdown.
[info] play - database [default] connected at jdbc:h2:file:database/play
[info] o.r.Reflections - Reflections took 11 ms to scan 1 urls, producing 9 keys and 10 values

開発中にカラムの変更入ったときとかは便利ですね。
そもそもそういうこと起きないように開発したいですが。。。

0 件のコメント:

コメントを投稿