sqlfile 태그가있는 Liquibase 향후 롤백 오류 : 파일 찾기
문제
ANT 스크립트에 미래의 롤백 태그를 추가했습니다. 내가하고 싶은 일 (그리고 미래의 롤백이 내가 찾고있는 것 같아요)는 SQL 롤백 스크립트를 생성하는 것입니다.롤백 스크립트는 SQL 스크립트와 함께 제공되어야합니다 내 고객의 요구 사항입니다).
내 changelog 파일에는 많은 변경 사항이 있으며 그중 일부에는 <sqlFile>
꼬리표.
예를 들어:
<databaseChangeLog ...>
<include file="latest/somesqlprocedure.xml" relativeToChangelogFile="true"/>
</databaseChangelog...>
어디에 latest/somesqlprocedure.xml
있습니다 sqlFile
꼬리표.
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<sqlFile path="${changelog.dir}/latest/myprocedure.sql" splitStatements="false" />
</changeSet>
</databaseChangeLog>
개미 스크립트를 실행하면 다음 오류가 발생합니다.
liquibase.exception.changelogparseexception : 유효하지 않은 마이그레이션 파일 :
<sqlfile path=${changelog.dir}/latest/myprocedure.sql>
- 파일을 찾을 수 없습니다
무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?
이것은 build.xml 파일의 스 니펫입니다
<target name="db-future-rollback" depends="init">
<rollbackFutureDatabase
changeLogFile="${db.changelog.file}"
driver="${database.driver}"
url="${database.url}"
username="${database.username}"
password="${database.password}"
outputfile="${database.rollback.dir}"
promptOnNonLocalDatabase="${prompt.user.if.not.local.database}"
classpathref="project.classpath"
>
</rollbackFutureDatabase>
</target>
미리 감사드립니다.
해결책
문제는 ClassPath 관련 경로가 아닌 SQLFile에서 절대 경로를 사용하는 데 발생할 수 있습니다. ClassPath 상대 경로는 원래 Liquibase에서 지원되었으며 여전히 더 잘 테스트되었습니다. 절대 경로 옵션이 최근에 추가되었으며, FirurerollbackSQL 코드는이를 지원하기 위해 패치되지 않았을 수 있습니다.
상대 경로를 사용하여 sqlfile을 사용해 볼 수 있습니까?
참고로, 프라이나 이름이 데이터 타사 체인지 로그 테이블에서 사용되기 때문에 상대 경로 옵션이 일반적으로 더 좋습니다. 절대 경로를 사용하는 경우 전체 경로가 저장되고 다른 경로에서 ChangEleg를 다시 실행하려고하면 (또는 다른 기계에서 동일한 데이터베이스에 대해 실행) Liquibase 다시 실행하십시오.