嗨。我正在为我的应用程序使用Play framework
和Slick
和PostgreSQL
。因此,我设计了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
。
但是,如果您要设置其他环境,例如staging
或production
,则将失败: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]
现在正在播放问题,进化不适用。
我需要知道如何实现其中一项(以解决我的问题):
答案 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地址。
此外,如果您希望能够配置jenkins或Play_Runtime_Guice中的IP
地址,则可以使用此地址:
url="jdbc:postgresql://"${?POSTGRESQL_IP}"/dbName"