2012-06-25 3 views
1

설명서를 읽은 후 이미 상당히 많은 테이블이 있고 실행중인 기존 프로젝트에서 데이터베이스 마이그레이션 플러그인을 사용할 수있었습니다. 생산. 로컬로 다음 프로세스를 진행했습니다.데이터베이스 마이그레이션 플러그인을 사용하여 로컬 개발 환경을 설정 한 후 테스트 서버를 업데이트하는 방법

Pulled down latest production database 
Source production database to local dev 
grails dbm-generate-changelog changelog.groovy 
grails dbm-changelog-sync 
grails dbm-gorm-diff 2012-06-25-latest.groovy --add 
grails dbm-update 

향후 변경 세트를 적용 할 수있는 이유는 각자 로컬로 처리해야하는 이유입니다. 그러나 이제 2012-06-25-latest.groovy를 테스트 서버 중 하나에서 실행하고 싶습니다. 이미 프로덕션 데이터베이스를 기반으로하는 최신 데이터베이스가 있습니다.

dbm-update를 실행하려했지만 동기화가되지 않은 상태에서 이미 존재하는 테이블을 만드는 데 실패했습니다. 따라서 dbm-changelog-sync를 실행했지만 dbm-update를 실행하면 실제로 최신 파일이 적용되지 않았습니다.

변경 세트에 컨텍스트 (태그)를 추가하고 dbm-update를 실행할 때 해당 컨텍스트를 지정할 수 있다는 것을 알고 있습니다 만 이것이이 작업에 대한 유일한 방법인지 또는 워크 플로우가 필요한지 알고 싶습니다. 개조 된; 변경 로그를 테스트 서버에 적용하는 가장 좋은 방법은 무엇입니까?

+0

테스트 env에서 changlog-sync를 수행 한 후 dbm-update를 실행하려고하면 어떻게됩니까? 또한 나는 당신이 'grails test dbm-update'처럼하고 있다고 가정합니다 - 명령에서 환경 지정하기 –

+0

"내 질문에 다음과 같이 말했습니다."그래서 dbm-changelog-sync를 실행했지만 dbm-update를 실행했을 때, 실제로는 최신 파일을 적용합니다. " 그리고 예, 환경을 지정하고 있습니다. – Gregg

+0

dbm-changelog-sync를 실행하면 현재의 모든 변경 집합이 적용된 것으로 등록되므로, chabgelog.groovy 기반의 기존 변경 집합 중 execyte가 필요하다면 do dbm-update가 적용될 때 적용되지 않습니다. 그러나 새 changesets를 추가 한 다음 dbm-update를 수행하면 정상적으로 실행됩니다. 그리고 이것은 테스트 환경입니다 - 왜 당신은 changelog 동기화에 대해 걱정합니까, 당신은 dbm-drop-all을하고 dbm-update를 할 수 있습니다. 그리고 나서 모든 것은 괜찮을 것입니다. –

답변

0

내가 끝낸 것은 FATENAME = '2012-06-25-latest.groovy'가있는 DATABASECHANGELOG 테이블의 모든 행을 삭제하는 것입니다. dbm-status를 실행하면 256 개의 변경 사항이 있음을 알 수 있습니다. 나는 dbm-update를 실행했는데 모두 잘 돌아 간다.

이것이 어떻게 처리되었는지는 잘 모르겠지만 효과가있는 것으로 보입니다.

업데이트 :이 외에도 빈 데이터베이스에서 전체 마이그레이션을 실행 한 다음 INSERT 문을 사용하여 프로덕션 데이터베이스의 mysqldump 만 수행 할 수 있습니다.

+0

예. 2012-06-25-latest.groovy에서도 변경 사항을 동기화 했으므로 해당 파일에서 dint 동기화가 변경되면 dbm-update 만 제대로 수행됩니다. –

+0

야, 알았다. 문제는이 프로세스를 로컬에서 수행했기 때문에 해당 파일이 이미 존재했기 때문입니다. 그래서 동기화를 실행했을 때, 물론 그 파일을 sync'd합니다. 너는 내가 아직 모르는 것을 말하지 않고있다. : o) – Gregg

+1

오키 (Okey) - 내가 도우려고 한 것만으로도 좋았을뿐입니다. 당신이 이미이 모든 것을 알았을 때 그저 놀랐을뿐입니다. –