2013-11-14 3 views
1

레일스 앱에서 마이그레이션을 완료하는 데 다소 시간이 걸립니다. 먼저 열의 기본값을 업데이트 한 다음 Solr 인덱스를 다시 인덱싱합니다. 문제는 마이그레이션이 실행되는 동안 이전 버전의 앱이 부분적으로 새 데이터베이스와 solr 색인을 사용하여 요청을 처리한다는 것입니다. 새로운 기본 열 때문에 일부 오류가 발생합니다.레일 배포 : 데이터베이스와 앱이 동기화되지 않음

이러한 동작을 방지하는 모범 사례 방법이 있습니까? 우리는 두 번째 데이터베이스와 solr 인덱스를 사용해야합니까? 우리는 카피 스트라 노와 함께 배치하고 있습니다.

답변

2

이것은 장기간에 걸친 복잡한 레일 데이터베이스 마이그레이션의 일반적인 문제입니다.

는 여러 가지 방법이있어 :

(1) 데이터베이스 마이그레이션을 실행하기 전에 메시지와 함께 페이지, 예를 들어 "우리는 다음 30 분 동안 유지 보수를 위해 다운 '에 웹 트래픽을 리디렉션합니다. 이렇게하면 데이터베이스가 부분적으로 만 마이그레이션되어 응용 프로그램에 들어 오거나 실행되는 요청이 차단됩니다. 다운 타임으로 인해 이상적인 것은 아닙니다.

(2) 코드 배포 전에 데이터베이스 마이그레이션을 실행하고 데이터베이스가 역방향 및 역방향 호환이 가능하도록하십시오. 그런 다음 코드를 배포하여 새 스키마를 사용하십시오. "롤백"해야하는 경우 (다음 릴리스까지) 이전 스키마에도 쓸 수 있습니다. 그런 다음 나중에 다른 이주에서 컬럼을 제거하거나 이름을 YY 어 스키마를 정리합니다. 이를 "가동 중지 시간 제로 데이터베이스 이주"라고합니다.

(3) 두 개의 데이터베이스가있을 수 있으며 일단 새 데이터베이스가 준비되면 스위치를 수행 할 수 있습니다. 하지만 여기에서 문제는 응용 프로그램에서 빈번히 씁니다. 나중에 스크립트를 실행하여 동기화 할 수 있습니다.

롤백해야하는 경우에 대비하여 마이그레이션 전에 데이터베이스의 백업 덤프를 수행해야합니다. 예를 들어 컬럼을 제거하는 것과 같이 일부 DB 이주가 되돌릴 수 없기 때.입니다. 또는 영향을받는 테이블을 임시 테이블로 백업으로 복사 할 수 있습니다.

물론 비교적 조용한 기간에 마이그레이션을 수행하십시오.

solr의 경우 오류를 발생시키지 않고 증분 업데이트를 처리해야합니다.

관련 문제