我如何 运行 Heroku 上的 Flyway 迁移?

How do I run Flyway Migrations on Heroku?

我正在使用 FlywayDB 在 Maven Java 项目上进行迁移。我目前正在努力使部署到 Heroku 成为可能。

在我的本地机器上,我使用 Maven Flyway 插件来 运行 迁移:

$> mvn clean compile flyway:migrate

要在 heroku 上做同样的事情,我通常会尝试:

$> heroku run mvn flyway:migrate

但是,mvn 在构建阶段后不可用,因此会产生错误 (mvn: command not found)

我怎样才能 运行 我在 Heroku 上的飞行路线迁移?

我认为最好的办法是在使用 FlywayDB Java API 的应用程序中创建一个小 class。它可能看起来像这样:

class Migrator {
  public static void main(String[] args) throws Exception {
    ...
    Flyway flyway = new Flyway();
    flyway.setDataSource(url, user, password);
    flyway.migrate();
  }
}

然后在您的 Procfile 中创建一个条目,如下所示:

migrate: java -cp target/classes:target/dependency/* Migrator

最后 运行 根据需要 heroku run migrate

Heroku 不在 slug 中包含 Maven 的原因(即在 运行 时间)是因为 .m2 目录未保留。如果包含 Maven,然后你 运行 一个 mvn 命令,它首先必须下载互联网。 .m2 目录未保留,因为它会使 slug 大小太大。

根据 Heroku documentation,不建议将 Maven 插件用于 运行 Flyway 迁移。

文档中有两种选择: