我使用默认的内存h2数据库在本地开发了我的应用程序。一切都很完美。
现在我尝试通过推送到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 :(得分:0)
出现此错误:
ERROR: syntax error at or near "user"
我猜你的Evolution脚本是错误的。 User
是SQL中的保留字。 PLease尝试在开发PostgreSQL数据库中本地运行Evolution脚本。一旦工作,您可以尝试再次部署。
我还建议禁用生产应用的演进,有时这是一个冒险的系统。
答案 1 :(得分:0)
PostgreSQL将user
解释为关键字。如果您的应用中有app/models/User
个类,则播放将尝试创建名为user
的表。避免这种情况的最简单方法是将User
类重命名为MyUser
。 (如果您在其中一个类中使用名为user的属性,则可能会发生同样的情况。此处,您也应该重命名它。)
然后,您应该在本地运行您的应用程序并在浏览器中打开它,以便更新evolution脚本文件。然后,您可以在conf/evolutions/default/1.sql
找到进化脚本。根据此示例,它应该创建一个名为my_user
的表。