2013-06-28 138 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的表。