2012-11-12 1 views
3

데이터베이스 마이그레이션 플러그인을 사용하는 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로 설정하고 응용 프로그램을 다시 시작하면 문제없이 시작 프로세스가 완료됩니다.

내 질문은 :

  1. 어떻게 고정 데이터베이스 변경 기록을 떠나고 찾을 수 있으며, 어떻게 그것을 방지 할 수 있습니다.
  2. 잠금을 피할 수없는 경우 응용 프로그램 시작 프로세스에서 잠금이 해제되기 전에 잠금을 해제 할 수있는 방법이 있습니까? 응용 프로그램이 부트 스트랩 과정과 DB 트랜잭션을 완료 할 수 없습니다 데이터베이스 마이그레이션 중에 사망했을 때

답변

0

이 문제는 내 프로젝트에서 발생했습니다.

liquibase (데이터베이스 마이그레이션에서 사용되는 기본 라이브러리)는 잠금 항목을 작성한 다음 데이터베이스 트랜잭션을 시작하여 적용해야하는 모든 변경 세트를 처리합니다. 임의로 db 트랜잭션이 성공적으로 커밋되지 않으면 잠금 항목은 DATABASECHANGELOGLOCK에 남아 있습니다.

얼마 전에 같은 질문을 liquibase forum에 묻습니다.

DATABASECHANGELOG 표는이 정보를 시각화하는 dbm-db-doc 또는 DbDocController을 사용할 수 있습니다 (또는 물론, 직접 SQL과 DB 테이블에 액세스 할 수 있습니다)에 성공적으로 적용 DB를 변경 세트의 기록을 유지합니다.

+0

잠금 항목을 종료 한 채로 데이터베이스가 완전히 마이그레이션 된 상태에서 응용 프로그램이 이미 가동되었습니다. 응용 프로그램 수명주기 동안이 잠금을 얻는 다른 프로세스, 즉 부트 스트랩 하나가 있어야합니다. – Eduardo

+0

소스를 살펴 보지 않았지만 변경 로그가 보류 중인지 확인하기 전에 잠금을 획득했다고 생각합니다. 나는 같은 응용 프로그램 내에서'DATABASECHANGELOGLOCK'에 액세스하는 다른 "프로세스"가 존재하는지 의심 스럽습니다. –