【问题标题】:File not exist when run mysql database migrations on windows在 Windows 上运行 mysql 数据库迁移时文件不存在
【发布时间】:2021-04-04 13:13:02
【问题描述】:

我克隆了一个现有的存储库(由我办公室的一个团队创建的存储库,它处理我们正在开发的某个应用程序中的订阅),它在路径 ..\internal\db\migrations 中有一些数据库迁移文件,这是迁移文件路径。 首先,我运行命令 docker compose up .for 现有的 docker.yaml ,然后运行命令 go build 然后运行 ​​go run .

我进行了调试,应用程序到达了即将运行迁移文件的位置,然后显示错误:

无法初始化应用程序。错误:第一个 D:\subscription-store: 文件不存在

虽然我通过调试检查了路径,它们是正确的,同时迁移文件都存在。

我使用 Visual Studio 代码作为编辑器,Go 版本 1.15,docker 和 MySQL。我在环境 windows 10 上运行。

【问题讨论】:

  • 更多信息会很有帮助。你说“我克隆了一个现有的存储库”,哪个存储库? ,您说“我进行了搜索,发现这是在 Windows 上运行 docker 时的常见问题”,但您没有提供找到此信息的链接...
  • 我更新了问题并发布了答案,我今天解决了它

标签: mysql docker go database-migration golang-migrate


【解决方案1】:

经过调试和搜索,发现存储库使用一些路径从本地驱动器获取迁移文件。路径是在代码库中为 Mac 编写的,我在 Windows 机器上克隆了存储库,所以它不起作用。

该错误具体发生在函数调用中

migrate.NewWithDatabaseInstance(
        fmt.Sprintf("file://%s", fullPath),
        "mysql",
        driver,
    )

第一个参数的生成路径是

file//d:\\subscription-store\\....\\db\\migrations

这对于 Windows 来说是错误的,因为驱动程序 d: 不应该在路径中被支持。 解决如下

"file:///"+"subscription-store\\....\\db\\migrations"

当上面的 URL 发送到函数而不是旧的时,它成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 2016-09-19
    • 2016-12-03
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多