2016-04-13 28 views
2

我試圖創建一個數據庫來處理我在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" 

我進口ANORM在我app/models/Task.scala和定義任務爲:

import anorm._ 
import anorm.SqlParser._ 

case class 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) 

編輯:

好了,所以我在/application.conf/文件添加的行

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

,看看是否會有所作爲,現在當我嘗試Apply this Script!時,我收到一個不同的錯誤。現在我收到一個錯誤,說我的腳本語法不正確。任何人都可以找到它?

回答

3

group是保留關鍵字,你必須把它放在引號之間,如果你真的想使用它:

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

當你得到「不一致狀態」的錯誤,你也可以直接進入數據庫,並檢查play_evolutions表,查看發生了哪些錯誤會很有幫助。

此外,我建議您在運行它們之前測試數據庫中的進化。首先運行ups然後運行。以這種方式檢測語法錯誤更容易。

+0

啊,我只是在你回答時才明白這一點。我覺得很愚蠢哈哈。那麼,問題解決了!謝謝。 –

相關問題