2013-06-24 74 views
1

我創建了一個play framework 2.1.0項目並將其部署到了heroku上。上星期五我不得不改變數據模型來添加一些額外的字段。一旦我嘗試部署更改,它給了我演變錯誤。Playframework 2.1和Heroku更新問題

無法修復我已恢復更改並部署舊版本的問題,但仍出現錯誤。

的當前錯誤我得到是這樣的

database [default] connected at jdbc:postgresql: ... 
Position: 27 [ERROR:0, SQLSTATE:42601] 
ERROR: syntax error at or near "FALSE" 
at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1$$anonfun$apply$1.apply$mcV$sp(Evolutions.scala:435) 
Oops, cannot start the server. 
at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:434) 
at play.api.db.evolutions.Evolutions$.evolutionScript(Evolutions.scala:306) 
at scala.collection.immutable.List.foreach(List.scala:309) 
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63) 
at play.api.Play$.start(Play.scala:62) 
at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:432) 
@6ele4bdao: Database 'default' is in inconsistent state! 
.... 

部署我使用以下使用該procfile行:

web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyDownEvolutions.default=true -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${POSTGRESQL_URL} 

同樣的建議我用heroku pg:psql隨着SELECT id, last_problem FROM play_evolutions;找出錯誤,它說syntax error at or near "FALSE",但我沒有看到我的1.sql文件中有任何錯誤。

任何人都可以給我一個這個讓我瘋狂的手。

回答

2

有2個選項:

  • 你進化的腳本是不對的,你應該測試它針對本地PostgreSQL數據庫在你的開發環境

  • 你提到你之前已經做了部署。這意味着演變已經開始。但是你也提到你正在檢查1.sql內的錯誤。如果您已經運行過一次Evolution,Play會希望新腳本位於2.sql。這可能是你得到例外的原因。

另一種解決方案是禁用演進(設置在application.confevolutionplugin=disabled),並通過經由客戶端連接到PostgreSQL數據庫手動執行的更改。這可能意味着額外的工作,但它可能是避免數據庫處於不穩定狀態的更安全選擇。有時候,控制比自動化要好。

+0

Tks尋求幫助。應該自動生成2.sql還是應該重命名生成的1.sql?我沒有在本地運行。另外我測試了我的本地postgresql,它工作。所以我最終使用手動選項並刪除表 –

+2

你應該創建一個新文件,所以你有1.sql和2.sql。 Play不會自動生成演化文件,您必須創建它們。 –

+0

好的tks的信息:) –