【问题标题】:How to wait for database migrations to complete before starting tests in docker-compose.yml如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成
【发布时间】:2019-06-05 12:29:00
【问题描述】:

在 docker-compose.yml 文件中,我有 3 个服务。第一个服务用于启动 MySQL 数据库。第二个服务用于运行多个数据库迁移,以在第一个服务中创建的 MySQL 数据库中创建表和种子数据。第三个服务用于运行一些需要 MySQL 数据库的 node.js 单元测试。问题是我需要在数据库迁移完成后才开始单元测试。但是我没有办法知道。

我曾尝试在单元测试服务中使用 depends_on 配置选项使其依赖于数据库迁移服务,但根据 Docker 文档,depends_on 仅保证单元测试服务在数据库迁移服务启动后启动。

【问题讨论】:

    标签: unit-testing docker database-migration


    【解决方案1】:

    depends_on 选项仅允许您控制启动顺序。
    为了检查准备情况,您必须以编程方式检查它。您可以编写一个包装脚本来检查您的迁移是否完成,也可以使用现有工具,例如wait-for-it

    您可以在official documentation找到更多信息

    【讨论】:

    • 嗨,马克,感谢您的评论。但是迁移服务的问题是我没有可以固定的端口来检查它是否准备好,因为它只使用在第一个服务中设置的 MySQL 数据库。使用 wait-for-it 只能让我知道数据库是否准备就绪,但我无法知道数据库迁移是否完成。
    • 不能通过执行SQL脚本来检查吗?
    • 嗨,Marc,是的,我认为这是一个解决方案。但一个缺点是每次添加新迁移时都需要更新脚本。我只是想知道是否有一种方法可以避免这种情况。
    • 您不能在应用程序启动时运行您的迁移脚本吗?例如,在 Java 中,有一些库允许您在应用程序启动时运行 SQL 迁移脚本(请参阅 flywayliquibase
    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多