来自flywaydb.org的命令sbt flywayMigrate
。该命令需要用于事先设置flywayUrl
,flywayUser
和flywayPassword
。到目前为止一切都很好。
现在我希望能够将sbt flywayMigrate
用于两种不同的环境;他们的变量应该是不同的。
我尝试制作两个新命令:sbt flywayMigrateDev
和sbt flywayMigrateProd
。我无法弄清楚如何将新命令连接到flywayMigrate
。
我尝试创建一个新范围。但我无法弄清楚如何正确地连接变量和任务。
我想知道是否有人可以举例说明如何做到这一点。我想看一个代码示例。
我们可以将问题简化为:
取决于sbt flywayMigrate
的命令flywayUrl
。我们如何通过调用sbt命令允许命令使用不同的flywayUrl
(或者其他任何方式都是好的)?
谢谢!
答案 0 :(得分:1)
您应该使用config
。
示例.sbt
文件内容:
// Set up your configs.
lazy val prodConfig = config("prod")
lazy val devConfig = config("dev")
// Set up any configuration that's common between dev and prod.
val commonFlyway = Seq(
// For the sake of example, a couple of shared settings.
flywayUser := "pg_admin",
flywayLocations := Seq("filesystem:migrations")
)
// Set up prod and dev.
inConfig(prodConfig)(flywayBaseSettings(prodConfig) ++ commonFlyway)
flywayUrl.in(prodConfig) := "jdbc:etc:proddb.somecompany.com"
// Or however you want to load your production password.
flywayPassword.in(prodConfig) := sys.env.getOrElse("PROD_PASSWD", "(unset)")
inConfig(devConfig)(flywayBaseSettings(prodConfig) ++ commonFlyway)
flywayUrl.in(devConfig) := "jdbc:etc:devdb.somecompany.com"
flywayPassword.in(devConfig) := "development_passwd"
现在,您可以分别运行prod:flywayMigrate
和dev:flywayMigrate
来迁移生产和开发。
有关其他示例,请参阅the Flyway docs page。