db:migrate

SkinnyFramework で db:migration するとエラーになっちゃった。

DB Migration - Skinny Framework の Try now を PostgreSQL に変更してやってみたらエラーになる。Flyway で使ってるメタデータの schema_version ができてないと。

Flyway の task の中には Baseline をつくるコマンドがあるんだけど。Skinny の task には migrate と repair しかないので、baseline をつくるための指定する手段がなさそう。

h2 のデータベースでやると成功するだよね。こりゃ最初からつまずいた。

2015-05-31 17:47:31.947 DEBUG   --- [     run-main-0] scalikejdbc.ConnectionPool$              : Registered connection pool : ConnectionPool(url:jdbc:postgresql://localhost:5432/sandbox?loginTimeout=3&socketTimeout=10, user:sandbox) using factory : commons-dbcp2
2015-05-31 17:47:31.985  INFO   --- [     run-main-0] o.f.core.internal.util.VersionPrinter    : Flyway 3.2.1 by Boxfuse
2015-05-31 17:47:32.338  INFO   --- [     run-main-0] o.f.c.i.dbsupport.DbSupportFactory       : Database: jdbc:postgresql://localhost:5432/sandbox?loginTimeout=3&socketTimeout=10 (PostgreSQL 9.3)
2015-05-31 17:47:32.443  INFO   --- [     run-main-0] o.f.core.internal.command.DbValidate     : Validated 1 migration (execution time 00:00.059s)
[error] (run-main-0) org.flywaydb.core.api.FlywayException: Found non-empty schema "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
org.flywaydb.core.api.FlywayException: Found non-empty schema "public" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1035)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    at skinny.dbmigration.DBMigration$class.migrate(DBMigration.scala:39)
    at skinny.dbmigration.DBMigration$.migrate(DBMigration.scala:11)
    at skinny.task.DefaultTaskLauncher$$anonfun$18.apply(DefaultTaskLauncher.scala:36)
    at skinny.task.DefaultTaskLauncher$$anonfun$18.apply(DefaultTaskLauncher.scala:34)
    at skinny.task.SkinnyTaskLauncher$$anonfun$main$2.apply(SkinnyTaskLauncher.scala:25)
    at skinny.task.SkinnyTaskLauncher$$anonfun$main$2.apply(SkinnyTaskLauncher.scala:25)
    at scala.Option.map(Option.scala:146)
    at skinny.task.SkinnyTaskLauncher$class.main(SkinnyTaskLauncher.scala:25)
    at TaskRunner$.main(TaskRunner.scala:1)
    at TaskRunner.main(TaskRunner.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
[trace] Stack trace suppressed: run last task/compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last task/compile:run for the full output.
[error] (task/compile:run) Nonzero exit code: 1
[error] Total time: 19 s, completed 2015/05/31 17:47:32

2015.6.8 追記

Flyway がデータベースに何らかのオブジェクトがあると schema_version を生成しないみたい。schema_version なければ生成すればいいと思うんだけど、なにか意図があるんだろうな