2013-06-28 7 views
1

메모리 h2 데이터베이스의 기본값을 사용하여 내 응용 프로그램을 로컬로 개발했습니다. 모든 것이 완벽하게 작동합니다.Heroku의 Play Framework [2.1.1-java] 배포 오류

이제 Heroku로 푸시하여 앱을 배포하려고했습니다. 내가하려고 할 때, 다음

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

그래서 나는 그것을 밀어 : 같은

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

내 application.conf 보이는 :

는 그 전에 나는이 라인 내 응용 프로그램의 루트 폴더에 Procfile 추가 내 응용 프로그램에 액세스 할 내가 얻을 :

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 

으로 전체 DB를 삭제하려고 시도하고 나는 다시 밀어하지만 성공.

나는 전에 푸시를했다는 것을 언급해야하고, 그 당시에는 내 앱이 헤로 쿠에서 돌아가고 있었다. 유일한 문제는 내 fixtures (응용 프로그램 시작시 작업과 함께 Global.java 파일)에서 제공된 자격 증명으로 로그인 할 수 없다는 것입니다.

제안 사항? 이 오류를

답변

0

는 :

ERROR: syntax error at or near "user" 

나는 당신의 진화 스크립트가 잘못된 것 같아요. User은 SQL의 예약어입니다. dev에 PostgreSQL 데이터베이스에서 Evolution 스크립트를 로컬로 실행하십시오. 일단 작동하면 다시 배포 할 수 있습니다.

프로덕션 앱에 대한 발전을 비활성화하는 것이 좋습니다. 위험한 시스템입니다.

0

PostgreSQL은 user을 키워드로 해석합니다. 앱에 app/models/User 클래스가있는 경우 재생하면 user이라는 테이블이 만들어집니다. 이것을 피하는 가장 쉬운 방법은 User 클래스의 이름을 MyUser과 같은 것으로 변경하는 것입니다. (클래스 중 하나에서 user라는 속성을 사용하는 경우에도 마찬가지 일 수 있습니다. 여기에서도 이름을 변경해야합니다.)

그런 다음 응용 프로그램을 로컬에서 실행하고 브라우저에서 열어서 진화 스크립트 파일을 업데이트해야합니다. 그런 다음 진화 스크립트를 conf/evolutions/default/1.sql에서 찾을 수 있습니다. 이 예제에 따르면 이제 my_user이라는 테이블을 만들어야합니다.