데이터베이스 마이그레이션 플러그인을 사용하는 Heroku에서 호스팅되는 Grails 애플리케이션이 있습니다. 때때로 응용 프로그램이 어떤 도움 메시지없이 시작시 stucked 얻을 다시 시작할 시간 : 몇 가지 조사 후DATABASECHANGELOG 테이블이 잠겨 있기 때문에 Grails 애플리케이션이 시작될 때 막히게됩니다
2012-11-12T11:21:06+00:00 app[web.1]: Configuring Spring Security Core ...
2012-11-12T11:21:06+00:00 app[web.1]: ... finished configuring Spring Security Core
2012-11-12T11:21:06+00:00 app[web.1]:
2012-11-12T11:21:22+00:00 heroku[web.1]: Stopping process with SIGKILL
2012-11-12T11:21:22+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2012-11-12T11:21:24+00:00 heroku[web.1]: Process exited with status 137
2012-11-12T11:21:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:22:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:25:10+00:00 heroku[router]: Error H10 (App crashed) -> GET abc.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
, 나는 = LOCKED 열로 DATABASECHANGELOGLOCK 테이블에 레코드가 있었기 때문에 이런 일이 된 것을 발견 참된. 수동으로 LOCKED 값을 FALSE로 설정하고 응용 프로그램을 다시 시작하면 문제없이 시작 프로세스가 완료됩니다.
내 질문은 :
- 어떻게 고정 데이터베이스 변경 기록을 떠나고 찾을 수 있으며, 어떻게 그것을 방지 할 수 있습니다.
- 잠금을 피할 수없는 경우 응용 프로그램 시작 프로세스에서 잠금이 해제되기 전에 잠금을 해제 할 수있는 방법이 있습니까? 응용 프로그램이 부트 스트랩 과정과 DB 트랜잭션을 완료 할 수 없습니다 데이터베이스 마이그레이션 중에 사망했을 때
잠금 항목을 종료 한 채로 데이터베이스가 완전히 마이그레이션 된 상태에서 응용 프로그램이 이미 가동되었습니다. 응용 프로그램 수명주기 동안이 잠금을 얻는 다른 프로세스, 즉 부트 스트랩 하나가 있어야합니다. – Eduardo
소스를 살펴 보지 않았지만 변경 로그가 보류 중인지 확인하기 전에 잠금을 획득했다고 생각합니다. 나는 같은 응용 프로그램 내에서'DATABASECHANGELOGLOCK'에 액세스하는 다른 "프로세스"가 존재하는지 의심 스럽습니다. –