scala - 玩!框架数据库脚本应用程序错误

标签 scala playframework anorm

我正在尝试创建一个数据库来处理我在 Play 中的任务!框架。

这是我所拥有的:

build.sbt中:

libraryDependencies ++= Seq(
  jdbc,
  cache,
  ws,
  evolutions,
  "com.typesafe.play" %% "anorm" % "2.5.0",
  "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0-RC1" % Test
)

conf/evolutions/default/1.sql 中:

default.driver = org.h2.Driver
default.url = "jdbc:h2:mem:play"

我正在我的 app/models/Task.scala 中导入一个 anorm 并将任务定义为:

import anorm._
import anorm.SqlParser._

案例类 Task(id: Int, name: String, description: String, group: String)

这是在我的 conf/evolutions/default/1.sql 中:

#Tasks Schema

# ---- !Ups
CREATE SEQUENCE task_id_seq;
CREATE TABLE task (
    id integer NOT NULL DEFAULT nextval('task_id_seq'),
    label varchar(255),
    description varchar(255),
    group varchar(255)
);

# ---- !Downs
DROP TABLE task;
DROP SEQUENCE task_id_seq;

我觉得我做的一切都是正确的,当我在 http://localhost:9000 刷新我的服务器时这些是我收到的错误:

http://i.imgur.com/MIl8Tds.png

有人告诉我这很好,但是当我单击“应用此脚本”时,我收到此错误:

http://i.imgur.com/0NY8UGv.png

我该如何解决这个问题?我做错了什么?

以下是有关错误的更多详细信息:

[error] p.a.d.e.DefaultEvolutionsApi - Table "TASK" not found; SQL statement:
DROP TABLE task [42102-191] [ERROR:42102, SQLSTATE:42S02]
[error] application - 

! @6pm2o74ag - Internal server error, for (GET) [/@evolutions/apply/default?redirect=http%3A%2F%2Flocalhost%3A9000%2F] ->

play.api.db.evolutions.InconsistentDatabase: Database 'default' is in an inconsistent state![An evolution has not been applied properly. Please check the problem and resolve it manually before marking it as resolved.]
    at play.api.db.evolutions.DatabaseEvolutions.checkEvolutionsState(EvolutionsApi.scala:276)
    at play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:126)
    at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:102)
    at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:117)
    at play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:82)
    at play.api.db.evolutions.EvolutionsWebCommands.handleWebCommand(ApplicationEvolutions.scala:360)
    at play.core.DefaultWebCommands$$anonfun$handleWebCommand$1.apply(WebCommands.scala:40)
    at play.core.DefaultWebCommands$$anonfun$handleWebCommand$1.apply(WebCommands.scala:40)
    at scala.collection.immutable.Stream.flatMap(Stream.scala:489)
    at play.core.DefaultWebCommands.handleWebCommand(WebCommands.scala:40)

编辑:

好的,所以我添加了这些行

  db.default.enabled = true
  applyEvolutions.db=true
  applyEvolutions.default=true
  applyDownEvolutions.default=true

在我的 /application.conf/ 文件中查看这是否会有所不同,现在当我尝试 Apply this Script! 时,我收到了一个不同的错误。现在我收到一条错误消息,指出我的脚本中的语法不正确。谁能找到它?

最佳答案

group是一个保留关键字,如果你真的想使用它,你必须把它放在引号之间:

CREATE TABLE task (
    id integer NOT NULL DEFAULT nextval('task_id_seq'),
    label varchar(255),
    description varchar(255),
    "group" varchar(255)
)

当您遇到“不一致状态”错误时,您还可以直接转到数据库并检查 play_evolutions 表,这有助于了解发生了哪些错误。

此外,我建议您在游戏中运行之前先在数据库中测试您的进化。先跑上坡,再跑下坡。这样更容易检测语法错误。

关于scala - 玩!框架数据库脚本应用程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611097/

相关文章:

Scala Option 隐式转换 - 不好的做法或缺少功能?

playframework - 是否可以在 Play Framework 中调用 SQL 注入(inject)?

Scala Play Framework Anorm SQL.on 禁用包装替换为 ' '

postgresql - 没有时区的 playframework 异常 postgresql 时间戳

java - 'CompletionStage' 和 'CompletableFuture' 有什么区别

scala - Anorm查询中如何使用 'like'?

scala - 有电梯的 CMS 吗?

float 步长的标度范围精度

scala - 为什么我无法向 scala 隐式类添加字段?

playframework - 玩! 2.3.1 - main.css 404(公共(public) Assets 不路由?)