无法在自定义Slick环境配置中应用播放进化

时间:2018-09-09 07:33:28

标签: scala playframework slick playframework-evolutions

说明:

嗨。我正在为我的应用程序使用Play frameworkSlickPostgreSQL。因此,我设计了CI_Pipelines并在application.conf中对其进行了配置。当我们像这样设置平滑配置时:

play.evolutions.db.default {
  enabled = true
  autoApply=true
} 
slick.dbs.default {
driver="slick.driver.PostgresDriver$"
db {
    driver=org.postgresql.Driver
    dbName=dbName
    url="jdbc:postgresql://127.0.0.1/dbName"
    user=***
    password=***
   }
}

和代码(dao文件):

@Singleton
class UserDao @Inject()(
                       protected val dbConfigProvider: DatabaseConfigProvider
                       )(implicit val ex: ExecutionContext) extends HasDatabaseConfigProvider[JdbcProfile] {
  import driver.api._
  val userTableQuery = TableQuery[UserTable]

一切正常,例如EVOLUTION为我们提供的play
但是,如果您要设置其他环境,例如stagingproduction,则将失败:D。
 我阅读了Slick的此文档,您可以从here阅读,非常适合编写成功的配置文件。所以我这样写:

com.my.org {
env = "development"
env = ${?MY_ENV}
development {
  db {
    dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
    properties = {
      driver = "slick.driver.PostgresDriver$"
      user = "myuser"
      password = "*****"
      url = "jdbc:postgresql://myIP/dbName"
    }
    numThreads = 10
  }
}
staging {
db {
    ip=186.14.*.*
    ...
   }
}
production {
db {
    ip=196.82.*.*
    ...
   }
}
}

**您必须注意的重要一点是,我的PostgreSQL在我的(docker容器)外部,因此我必须远程连接到它。

在代码中,我们有:

    class UserDao @Inject()(
                       )(implicit val ex: ExecutionContext) {

  import driver.api._
  val db = Database.forConfig(s"$prefix.db")
  val userTableQuery = TableQuery[UserTable]

问题:

现在正在播放问题,进化不适用。

问题:

我需要知道如何实现其中一项(以解决我的问题):

  1. 如何(之前在问题部分中)以这种方式应用游戏进化?
  2. 如何以更好的方式设置我的环境?

1 个答案:

答案 0 :(得分:0)

我的一个朋友[通过电话]向我咨询了这个问题,这是我们想出的解决方案:

slick.dbs.default.driver = "slick.driver.PostgresDriver$"
slick.dbs.default.db {
  driver = org.postgresql.Driver
  ip = localhost
  dbName = ***
  user = ***
  password = "***"
  url="jdbc:postgresql://postgresql/"${slick.dbs.default.db.dbName}
}

您还可以使用Docker创建docker网络并设置PostgreSQL容器名称而不是IP地址。

此外,如果您希望能够配置jenkinsPlay_Runtime_Guice中的IP地址,则可以使用此地址:

url="jdbc:postgresql://"${?POSTGRESQL_IP}"/dbName"