Raf*_*-WO 5 postgresql liquibase docker
我想为本地运行(而不是在容器中)的 PostgreSQL 数据库设置 Liquibase(使用 Docker)。我学习了多个教程,包括Docker Hub上的教程。
按照建议,我liquibase.docker.properties在我的中创建了一个文件<PATH TO CHANGELOG DIR>
classpath: /liquibase/changelog
url: jdbc:postgresql://localhost:5432/mydb?currentSchema=public
changeLogFile: changelog.xml
username: myuser
password: mypass
Run Code Online (Sandbox Code Playgroud)
才能跑docker run --rm --net="host" -v <PATH TO CHANGELOG DIR>:/liquibase/changelog liquibase/liquibase --defaultsFile=/liquibase/changelog/liquibase.docker.properties <COMMAND>。
当我运行时[...] generateChangeLog,我得到以下输出(带有选项--logLevel info):
classpath: /liquibase/changelog
url: jdbc:postgresql://localhost:5432/mydb?currentSchema=public
changeLogFile: changelog.xml
username: myuser
password: mypass
Run Code Online (Sandbox Code Playgroud)
看起来命令“成功”运行,但我无法changelog.xml在我安装的本地目录中找到该文件,即<PATH TO CHANGELOG DIR>. 然而,安装必须有效,因为它已成功连接到数据库,即容器能够访问和读取liquibase.docker.properties.
首先,我想我可能必须对 Docker “说”它可以在我的磁盘上写入,但似乎应该支持这一点 [来自 Docker Hub 上的描述]:
/liquibase/changelog 卷还可用于写入输出的命令,例如generateChangeLog
我缺少什么?预先感谢您的任何帮助!
附加信息
输出docker inspect:
[2021-04-27 06:08:20] INFO [liquibase.integration] No Liquibase Pro license key supplied. Please set liquibaseProLicenseKey on command line or in liquibase.properties to use Liquibase Pro features.
Liquibase Community 4.3.3 by Datical
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 06:08:20 (version 4.3.3 #52 built at 2021-04-12 17:08+0000)
BEST PRACTICE: The changelog generated by diffChangeLog/generateChangeLog should be inspected for correctness and completeness before being deployed.
[2021-04-27 06:08:22] INFO [liquibase.diff] changeSets count: 1
[2021-04-27 06:08:22] INFO [liquibase.diff] changelog.xml does not exist, creating and adding 1 changesets.
Liquibase command 'generateChangeLog' was executed successfully.
Run Code Online (Sandbox Code Playgroud)
当您运行时generateChangeLog,应将文件的路径指定为,/liquibase/changelog/changelog.xml即使update它需要changelog.xml
例子:
docker run --rm --net="host" -v <PATH TO CHANGELOG DIR>:/liquibase/changelog liquibase/liquibase --defaultsFile=/liquibase/changelog/liquibase.docker.properties --changeLogFile=/liquibase/changelog/changelog.xml generateChangeLog
Run Code Online (Sandbox Code Playgroud)
对于generateChangeLog,changeLogFile 参数是要输出的文件的特定路径与相对于classpathupdate 和其他命令使用的设置的路径。
当您包含命令行参数以及像上面这样的 defaultsFile 时,命令行参数获胜。这使您可以利用相同的默认设置,同时在特定命令需要更多/不同的设置时替换特定设置。
细节
创建文件的操作和读取现有文件的操作之间存在区别。
使用 Liquibase,您几乎总是希望使用与类路径中的目录相关的文件路径,如示例所示。指定的变更日志文件存储在跟踪系统中,因此如果您运行相同的变更日志但以不同的方式引用(因为您移动了根目录或从不同的计算机运行),那么 Liquibase 会将其视为新文件并尝试重新运行已经运行的变更集。
这就是文档中有classpath: /liquibase/changelog和的原因changeLogFile: com/example/changelog.xml。该update操作在 /liquibase/changelog 目录中查找名为 的文件com/example/changelog.xml,并找到它并将路径存储为com/example/changelog.xml.
GenerateChangeLog 是“并不总是与类路径相关”的情况之一,因为它需要知道在哪里存储文件。如果您只是在创建时指定输出changeLogFile,changelog.xml则只会创建相对于进程工作目录的文件,这不是您需要/期望的。
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |