Play пытается применить все эволюции Доу при создании нового проекта Play 2.6 с существующей базой данных. - PullRequest
0 голосов
/ 03 июля 2018

В настоящее время у меня запущено приложение Play 1.2.7 с существующей базой данных Postgresql. Я собираюсь перенести все мое приложение в Play 2.6.

Я прочитал большую часть документации Play Framework , но не могу найти решение своей проблемы.

Дело в том, что я только добавил свои существующие эволюции (1.sql -> 178.sql) в проект, без каких-либо моделей на данный момент.

ВАЖНЫЙ ФАКТ: Я только что обнаружил, что в сценариях эволюции есть «дыра». У нас есть скрипты от 1.sql до 107.sql и от 111.sql до 178.sql. Скрипты 108, 109 и 110 отсутствуют (историческая ошибка, я думаю, командой разработчиков).

Таблица play_evolutions базы данных соответствует этой дыре. Там нет строк с идентификатором 108, 109 или 110.

При запуске моего приложения hello world Play 2.6, Play хочет применить все эти спады, а затем применить только взлеты от 1 до 107. Это проблема, потому что она сотрет все мои данные, и кажется, что дыра останавливает взлеты до 107.sql.

Мой вопрос таков: проблема в дыре в скриптах или в том, что я еще не интегрировал модели? Как я могу сделать так, чтобы Play принял эту дыру или заполнил ее вручную.

Мои эволюции в conf / evolutions / default

Вот мои основные конфигурационные файлы:

1) conf / application.conf

## Secret key
play.crypto.secret = "changeme"

## Internationalisation
play.i18n {
  langs = [ "fr" ]
}

## JDBC Datasource
db {
    default.driver = org.postgresql.Driver
    default.url = "postgres://user:password@localhost:5432/databasename"
    default.jndiName=DefaultDS
}

ebean.default = ["models.*"]

# Number of database connections
# See https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
fixedConnectionPool = 9

# Set Hikari to fixed size
play.db {
  prototype {
    hikaricp.minimumIdle = ${fixedConnectionPool}
    hikaricp.maximumPoolSize = ${fixedConnectionPool}
  }
}

# Job queue sized to HikariCP connection pool
database.dispatcher {
  executor = "thread-pool-executor"
  throughput = 1
  thread-pool-executor {
    fixed-pool-size = ${fixedConnectionPool}
  }
}

2) build.sbt

name := """my-app"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)

scalaVersion := "2.12.4"

libraryDependencies += guice
libraryDependencies += "org.postgresql" % "postgresql" % "42.2.2"
libraryDependencies ++= Seq(evolutions, jdbc)


// Compile the project before generating Eclipse files, so that generated 
.scala or .class files for views and routes are present
EclipseKeys.preTasks := Seq(compile in Compile, compile in Test)


PlayKeys.devSettings += "play.server.http.port" -> "80"

3) project / plugins.sbt

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.15")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.1.3")

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете добавить play.evolutions.autoApplyDowns = false в application.conf, чтобы запретить проигрыванию сценарий

рекомендуется в производстве

0 голосов
/ 04 июля 2018

Я наконец нашел решение.

Я только что удалил все скрипты (файлы ~ 178 * .sql) из папки conf / evolutions. Я также удалил все строки в таблице play_evolutions моей базы данных.

Наконец, я добавил пустой файл 1.sql (без него Play автоматически генерирует DDL-скрипты на основе моделей)

Итак, перенося мое приложение, я запустил новый проект Play 2.6, потерял все мои прошлые изменения и сохранил свои данные.

Может быть, сейчас это лучший способ сделать, но если это может кому-то помочь!

...