播放2.5.x:如何更改默认evolutions目录位置?

时间:2016-12-30 22:04:31

标签: scala playframework sbt slick

有没有办法更改默认evolutions目录位置?我需要这个,因为我有以下几个非常罕见的用例:

  • 对于Dev / Prod,我使用default数据库Postgres
  • 对于单元测试,我需要使用H2内存数据库
  • evolutions/default/1.sql是便携式的(Postgres& H2)
  • evolutions/default/2.sql是非便携式Postgres脚本
  • 在Dev / Prod中,我需要进化才能运行1.sql2.sql
  • 在单元测试中,我需要进化才能仅运行1.sql

有没有办法使用application.conf或某些sbt设置alla例如。

javaOptions in Test += "-Dconfig.file=conf/application.test.conf"

能否更改test的默认演变目录?

如果我能说,我的OP将会解决,例如(理论上没有用!)

javaOptions in Test += "-Devolutions.prefix=conf/testdatabase/"

然后:

conf/
    evolutions/default/1.sql 
                       2.sql
    testdatabase/evolutions/default/1.sql -> ../../../evolutions/default/1.sql

对于我不知道的任何其他解决方案,我会很高兴......只要它有效:)

1 个答案:

答案 0 :(得分:4)

在测试配置文件中,通过添加此行来关闭默认的ev演变应用程序。

ListView

在测试文件中定义一个辅助方法,在调用时将应用Evolutions。

# Evolutions should not be applied by default
play.evolutions.db.default.enabled = false

然后在您的测试中覆盖import play.api.db.Database import play.api.db.evolutions.{DatabaseEvolutions, EvolutionsReader, ThisClassLoaderEvolutionsReader} def applyEvolutions(database: Database, evolutionsToSkip: Seq[Int], evolutionsReader: EvolutionsReader = ThisClassLoaderEvolutionsReader, autocommit: Boolean = true, schema: String = ""): Unit = { val dbEvolutions = new DatabaseEvolutions(database, schema) val evolutions = dbEvolutions.scripts(evolutionsReader).filterNot(s => evolutionsToSkip.contains(s.evolution.revision)) dbEvolutions.evolve(evolutions, autocommit) } beforeAll方法:

afterAll

您可以按如下方式访问数据库:

override def beforeAll(): Unit = {
    applyEvolutions(database, Seq(2))
  }

  override def afterAll(): Unit = {
    Evolutions.cleanupEvolutions(database)
  }