2015-07-03 93 views
3

我正在使用FlywayDB进行Maven Java项目的迁移。我目前正在努力使其能够部署到Heroku。如何在Heroku上运行Flyway迁移?

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

$> mvn clean compile flyway:migrate

要做到在Heroku一样,我通常会尝试:

$> heroku run mvn flyway:migrate

然而,mvn在构建阶段后不可用,所以这会产生错误(mvn: command not found

如何在Heroku上运行我的飞路迁移?

回答

3

我认为你最好的选择是在你的应用程序中使用FlywayDB Java API创建一个小类。这可能是这样的:

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目录不会被保留,因为它会使嵌块尺寸过大。

+1

“它必须先下载互联网”<3 – slifty

+0

或者你可以简单地在应用程序启动时运行迁移:-) –