Play 2.5 - slick:与 heroku 的数据库连接

Play 2.5 - slick: Database connection with heroku

这是我第一次在 Heroku 上部署 Play 应用程序(使用 slick)。一切正常,但在一段时间不活动后,我存储在 数据库中的所有数据都消失了 ...

在 heroku 中,我有 Heroku Postgres 附加组件和 plan Hobby Dev。也许是因为这个计划?

还是我配置的问题?

我的“Procfile”:

web: target/universal/stage/bin/square-it-wtf -Dhttp.port=${PORT} -Dplay.evolutions.db.default.autoApply=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}

我的数据库配置来自 application.conf:

slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver=org.h2.Driver
slick.dbs.default.db.url="jdbc:h2:mem:play;DB_CLOSE_DELAY=-1"

db.default.driver=org.postgresql.Driver
db.default.url="postgres://postgres:password@localhost:5432/postgres"
db.default.url=${?DATABASE_URL}

我的build.sbt

libraryDependencies ++= Seq(
  "com.typesafe.play" %% "play-slick" % "2.0.0",
  "com.typesafe.play" %% "play-slick-evolutions" % "2.0.0",
  "com.h2database" % "h2" % "1.4.187",
  "org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
  ...

)

感谢您的帮助!

问题可能出在您的配置上。 db.default.* 个条目是 ignored by Slick,因此您的应用程序可能连接到内存数据库中的 H2,而不是 Postgres。

只需更新您的配置以将 Slick 指向正确的数据库:

slick.dbs.default.driver="slick.driver.PostgresDriver$"
slick.dbs.default.db.driver="org.postgresql.Driver"
slick.dbs.default.db.url=${JDBC_DATABASE_URL}

或者

slick.dbs.default.driver="slick.driver.PostgresDriver$"
slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
slick.dbs.default.db.properties.driver = "org.postgresql.Driver"