Playframework 2.1和Heroku更新问题

时间:2013-06-24 09:02:43

标签: heroku playframework-2.1 heroku-postgres

我创建了一个play framework 2.1.0项目并将其部署在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:psqlSELECT id, last_problem FROM play_evolutions;来查找错误并显示syntax error at or near "FALSE"但我在1.sql文件中看不到任何错误。

任何人都可以帮我一把,这让我发疯了。

1 个答案:

答案 0 :(得分:2)

有两个选项:

  • 您的进化脚本错误,您应该在开发环境中对本地postgresql数据库进行测试

  • 您提到之前已经进行了部署。这意味着已经进行了进化。但是你也提到你正在检查1.sql内的错误。如果您已经运行过一次evions,Play会希望新脚本位于2.sql。这可能是您获得例外的原因。

另一个解决方案是禁用evolutions(在evolutionplugin=disabled中设置application.conf)并通过客户端连接到postgresql数据库手动执行更改。这可能意味着额外的工作,但它可能是避免使数据库处于不稳定状态的更安全的替代方案。有时候,控制比自动化更好。