0

我最近开始了一个基于scala-play-react-seed的新项目。

我对 Play 有一点经验,并且有其他使用 play-slick 和 slick-evolutions 的项目 - 一切正常,并且在启动时识别和应用了演变。

在新项目中,这不会发生。我与数据库的连接一切正常,所以这不是问题。

据我所知,我没有收到有关演变的任何错误或警告。

我已经尝试在application.conf.

这是我的build.sbt

// core
libraryDependencies ++= Seq(
  evolutions,
  ehcache,
  ws,
  specs2 % Test,
  guice)

libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "4.0.2" % Test

// database
libraryDependencies += "com.typesafe.play" %% "play-slick" % "4.0.2"
libraryDependencies += "com.typesafe.play" %% "play-slick-evolutions" % "4.0.2"
libraryDependencies += "org.postgresql" % "postgresql" % "9.4-1201-jdbc41"

我怀疑 React UI 的钩子会阻止后端以某种方式获取这些文件,但不知道从哪里开始查找。非常感谢任何帮助。

编辑:

我很确定我application.conf的设置正确,但它是:

slick.dbs.default.profile = "slick.jdbc.PostgresProfile$"
slick.dbs.default.db.driver = "org.postgresql.Driver"
slick.dbs.default.db.url = "jdbc:postgresql://localhost:5432/standups?user=postgres&password=password"

正如我之前所说,我很确定这是正确设置的,因为我可以与数据库对话。只是没有被拾起的进化。

这是我1.sql的,位于conf/evolutions/default

-- !Ups

create table person
(
    id       serial       not null primary key,
    name     varchar(255) not null,
    age      smallint     not null
);

-- !Downs

drop table if exists person cascade;
4

3 回答 3

1

我不清楚为什么你的进化没有运行。

我试图在此提交中模拟您的设置:https ://github.com/d6y/scala-play-react-seed/commit/408853bda6f26a7a4fdc49487c2bb00d243ac0dc

...我必须修改FrontendRunHook以实际启动前端和服务器(通过https://github.com/yohangz/scala-play-react-seed/pull/30)。

除此之外,sbt run启动应用程序并应用进化(通过查看数据库进行验证)。

我添加了play.evolutions.db.default.autoApply = true,但如果没有它,您会被告知数据库需要迁移。

我也在使用 JDK 8,以避免与 Guice ( WARNING: An illegal reflective access operation has occurred) 相关的警告。但是,您没有提到您看到了这一点,因此这也可能无关紧要。

于 2020-09-01T13:13:18.560 回答
0

您需要启用 play evolutions 配置参数

https://www.playframework.com/documentation/2.8.x/Evolutions

play.evolutions.enabled=true


For example, to enable autoApply for all evolutions, you might set play.evolutions.autoApply=true in application.conf or in a system property. To disable autocommit for a datasource named default, you set play.evolutions.db.default.autocommit=false
于 2020-08-19T18:28:30.257 回答
0

您还需要applicationEvolutions在项目启动时调用。

通常,这将在ApplicationLoader.

这表示:

  1. 为您的应用程序“组件”添加一个类,其中包括扩展DBComponents with EvolutionsComponents和访问applicationEvolutions.
  2. 编写一个扩展的类,该类ApplicationLoaderload.ApplicationLoader
  3. 将完全合格的课程添加到您的application.confasplay.application.loader=your.package.name.here.MyAppLoader

ApplicationLoader您可以在以下位置查看和组件的概要: https ://www.playframework.com/documentation/2.8.x/ScalaCompileTimeDependencyInjection#Application-entry-point

在数据库代码中混合调用的细节applicationEvolutions位于:https ://www.playframework.com/documentation/2.8.x/Evolutions#Enable-evolutions

于 2020-08-27T07:46:10.167 回答