2011-08-30 4 views
0

내 응용 프로그램을 개발하는 동안 Grails database-migration plugin을 사용했으며 그 기능을 정말 좋아했습니다. (Grails의 1.3.7, 데이터베이스 마이그레이션 1.0)Grails 프로젝트 외부에서 데이터베이스 마이그레이션 플러그인 스크립트를 실행할 수 있습니까?

문제는 : 나는 모든 배포 내 응용 프로그램을 포함 데비안 패키지를 통해 발생해야한다는 것을 제한하고있다. 그것은 유능한 관리자 인 다른 그룹에 의해 설치 될 것이지만, 그 어떤 의미에서든 프로그래머는 설치되지 않을 것입니다. 따라서 일반적인 워크 플로 시나리오에서 설명한대로 데이터베이스 스키마를 마이그레이션 할 수 없습니다.

질문 : 어떤 스크립트/클래스/???

grails -Dgrails.env=$TARGET dbm-update 

grails -Dgrails.env=$TARGET dbm-changelog-sync 

내 데비안 /는 postinst 스크립트에서

grails -Dgrails.env=$PROD dbm-diff $PROMOTION_ENV 

: 명령을 실행 할 수 있도록 내가 묶을 필요하거나 패키지에 의존합니까?

데이터베이스 마이그레이션 플러그인을 런타임 종속성으로 만들고 Dbm * 스크립트를 포함하여 Grails를 설치하려고했지만 성공하지 못했습니다. Grails가 스크립트 중 하나를 실행하려고 할 때 Grails 어플리케이션의 루트에 있지 않다는 불평이 가장 가까이에 왔습니다.

이 작업을 수행 할 수 있습니까? 아니면 누구나 완전히 새로운 마이그레이션 메타포를 배울 필요가없는 좋은 대안을 제공 할 수 있습니까?

답변

1

세 스크립트는 해당 Liquibase 작업을위한 래퍼입니다. 일부 Grails 관련 스크립트가 있습니다. dbm-gorm-diff는 코드와 데이터베이스 사이의 변경 로그를 작성하지만 여기에는 적용되지 않는 개발자 스크립트입니다.

그래서 나는 곧장 Liquibase로 갈 것입니다. 명령 줄에서 연결 정보를 지정해야하기 때문에 호출이 좀 더 장황합니다 (Grails에서는 DataSource에서 가져올 수 있습니다). 그러나 스크립트는 쉽습니다. 클래스 패스에있는 Liquibase jar 파일 만 있으면 스크립트에 쉽게 추가 할 수 있습니다.

또 다른 단점은 Groovy 기반 마이그레이션 스크립트 대신 전통적인 Liquibase XML로 작업하게되므로 루핑, if/then 검사 등이 없다는 것입니다. 그러나 실행을위한 표준 마이그레이션이있는 한 괜찮을거야.

이것은 플러그인을 사용하는 것과는 다른 접근 방식이지만 플러그인은 XML 기반 변경 로그를 지원하므로이 시나리오에서 생성 된 변경 로그를 작성한 워크 로그에 추가 할 수 있습니다 (워크 플로우에 적합한 경우).

+0

빠른 답변 감사합니다! 관리자가 어떤 이유로 (프로덕션/감사) 프로덕션 스키마를 수정 한 경우 내 스키마를 순조롭게 마이그레이션하여 예기치 않은 동작을 방지하려고합니다. 적어도 마이그레이션 후 what-it-would-be와 비교할 사항은 마이그레이션 후 실제로 무엇인지를 알고 관리자에게 충분한 정보를 제공하는 것입니다. 필자는 설치 스크립트에서 패키징하기 직전에 빌드 서버 (플러그인 사용)가 생성 한 XML 변경 로그를 사용할 수 있다고 생각합니다.이를 실행하기 위해 liquibase를 사용합니다. 그게 내가 너의 의견을 바탕으로 시도 할거야. 다시, 고마워. – JohnKeller

관련 문제