2014-09-03 4 views
1

이것은 진행중인 프로젝트의 일부입니다 ... 도메인 객체를 분할하여 여러 응용 프로그램에서 사용할 수 있도록합니다. 도메인 객체에 대한 데이터베이스 이전 파일은 플러그인과 함께 존재하지만 ... dbm 업데이트 중에 앱이이를 참조 할 수 있기를 원합니다.Grails 마이그레이션 문제. DBM-UPDATE가 재귀를 포함하지 않고 자동으로 실패 함

플러그인 변경 로그를 인식하도록 응용 프로그램을 가져올 수는 있지만 변경 로그는 수행하지 않으며 예상대로 처리합니다.

GrailsPluginUtils를 사용하면 플러그인 파일의 경로와 플러그인 변경 로그를 가져올 수 있습니다. 내가 좋아하는 파일에 changeSet을 넣으면 실행됩니다. 같은 폴더 나 하위 폴더에있는 별도의 파일로 옮기고 "./someFile.groovy"를 통해 참조하면 찾을 수는 있지만 처리하지는 못합니다. 상대 파일 경로를 사용하지 않으면 "someFile.groovy"와 같은 파일을 찾을 수 없다는 오류가 발생하기 때문에 찾은 것 같습니다.

해결 방법은 있지만 문제가 있습니다. 실제 변환 (changeSets)을 포함하는 _changelog.groovy가있는 하위 디렉터를 사용하여 DB 마이그레이션이 발생하는 순서를 제어하기 때문에 수용 할 수 없습니다. 그러나 그들은 "포함"되어 있지 않습니다.

includeAll을 사용하면 해당 폴더에있는 모든 스크립트를 가져 오지만 다시 참조 된 다른 포함은 처리하지 않습니다. 재귀 적으로 폴더를 검사하는 스크립트를 작성할 수 있지만 _changelogs를 구문 분석하고 적절한 포함 순서 등을 파싱하려면 많은 코딩이 필요합니다.

정말 "포함하는 파일"이 필요합니다. 해당 응용 프로그램에서 자체 changelog 파일을 찾습니다.

다른 사람이이 작업을 수행 한 사람이 있습니까? 나는 끔찍한 무엇인가를 놓치고 있습니까? 응용 프로그램에서

...
databaseChangeLog { 
    include file: "./someChangeLogChangeSet.groovy" 
} 

감사합니다 플러그인에서
databaseChangeLog { 
... 
    include file: "${GrailsPluginUtils.pluginInfos.find { it.name == 'my-plugin' }.pluginDir}/grails-app/migrations/my_plugin_changes" 
} 

... ... ...

답변

0

우리는 또한에 변경 로그 파일을 추가 시도했다 도메인이 살고 있지만 기본 앱에서 플러그인에 액세스 할 수 없었던 플러그인. 그러나 다른 위치에서 파일에 액세스하려는 경우 구성 파일에서이 속성을 지정하고 여기에 폴더 이름을 지정하거나 모든 마이그레이션을 적절한 위치에있는 기본 응용 프로그램에 복사 할 수도 있습니다.

grails.plugin.databasemigration.changelogLocation = 'migrations' 

실제 해결책을 찾으면 게시하십시오.

+0

나는 기쁨으로 뛰어 내리고 세상과 나눌 것입니다. 나의 현재 실험은 기본적으로 구문 분석을 수행하는 마스터 변경 로그에 코드 조각을 작성하는 것으로, 마이그레이션 플러그인/liquibase가 당신을 위해해야한다고 포함합니다. 그게 싫어. ' – Tuishimi