2013-06-28 44 views
1

我在内存h2数据库中使用默认值在本地开发了我的应用程序。一切都很完美。Heroku的Play Framework [2.1.1-java]部署错误

现在我试着通过推送到Heroku来部署我的应用程序。

在此之前,我添加了一个Procfile到我的应用程序的根文件夹这一行:

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

我application.conf样子:

db.default.driver=org.h2.Driver 
db.default.url="jdbc:h2:mem:play;MODE=PostgreSQL" 

所以我推说,然后,当我尝试访问我的应用程序我得到:

Salieri:addressManager administrator$ heroku ps 
=== web (1X): `target/start -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.url=${DATABASE_URL} -Ddb.default.driver=org.postgresql.Driver` 
web.1: crashed 2013/06/27 22:04:16 (~ 4m ago) 

和Heroku的日志:

2013-06-27T20:04:14.511136+00:00 app[web.1]: [error] play - ERROR: syntax error at or near "user" 
2013-06-27T20:04:14.515578+00:00 app[web.1]: at play.api.db.evolutions.Evolutions$.databaseEvolutions(Evolutions.scala:334) 
2013-06-27T20:04:14.515153+00:00 app[web.1]: @6emdb57b1: Database 'default' is in inconsistent state! 

我试着用

heroku pg:reset HEROKU_POSTGRESQL_ROSE_URL 

删除整个分贝,然后我再次推开,但没有成功。

我不得不提一下,我之前做过一次推送,当时我的应用程序在Heroku上运行。唯一的问题是,我无法使用我的灯具中提供的凭据(具有应用程序启动时的作业的Global.java文件)登录。

有什么建议吗?

回答

0

从这个错误:

ERROR: syntax error at or near "user" 

我猜你的演进脚本是错误的。 User是SQL中的保留字。请尝试在开发的PostgreSQL数据库中本地运行Evolution脚本。一旦工作,您可以尝试再次部署。

我也建议禁用生产应用程序的演变,有时候这是一个有风险的系统。

0

PostgreSQL将user解释为关键字。如果您的应用中有app/models/User课程,则游戏会尝试创建名为user的表格。最简单的方法是将User类重命名为MyUser。 (如果你在其中一个类中使用名为user的属性,也可能发生同样的情况,这里也应该重新命名)。

然后,您应该在本地运行您的应用程序并在浏览器中打开它,以便更新演化脚本文件。然后你可以在conf/evolutions/default/1.sql找到进化脚本。根据这个例子,它现在应该创建一个名为my_user的表。