使用Heroku进行Framework Framework DB升级

Joe*_*oel 4 java heroku playframework

我正在使用Play Framework(1.2.4)我创建了一个UserAccount对象,将其部署到Heroku.工作得很好.然后我isAdminUserAccount类中添加了一个字段,在本地部署它并且工作正常(但我使用的是内存中的数据库),然后我将它部署在Heroku上,现在我得到以下异常:

2011-12-23T09:03:35+00:00 app[web.1]: play.exceptions.JavaExecutionException: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: PersistenceException occured : org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
...
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: org.postgresql.util.PSQLException: ERROR: column useraccoun0_.isadmin does not exist
...
Run Code Online (Sandbox Code Playgroud)

我一直在寻找如何进行数据库升级,Play网站说Hibernate应该为我处理这个问题.

这是我的数据库属性:

%prod.db=${DATABASE_URL}
%prod.jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
%prod.jpa.ddl=update
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢您的帮助.

Per*_*ega 7

在Prod模式下,属性jpa.ddl应为none.更新在生产中存在风险,因为它可能会破坏数据库(因为它似乎正在发生在你身上!

管理这个的正确方法是:

  1. 在Heroku应用程序上安装Heroku SQL控制台(从这里开始)
  2. jpa.ddl更改为none
  3. 使用SQL控制台连接到您的heroku数据库,并应用您必须的任何修复/更新
  4. 将应用程序重新上传到Heroku(记得在本地进行新的提交,或者Heroku会说代码已经是最新的)

这应该工作.


Jam*_*ard 6

您需要在Heroku上运行Play数据库演变:

heroku run "play evolutions:apply --%prod"
Run Code Online (Sandbox Code Playgroud)