如何根据不同的sbt命令设置SettingKey的值?

时间:2017-01-22 19:39:13

标签: sbt flyway

来自flywaydb.org的命令sbt flywayMigrate。该命令需要用于事先设置flywayUrlflywayUserflywayPassword。到目前为止一切都很好。

现在我希望能够将sbt flywayMigrate用于两种不同的环境;他们的变量应该是不同的。

我尝试制作两个新命令:sbt flywayMigrateDevsbt flywayMigrateProd。我无法弄清楚如何将新命令连接到flywayMigrate

我尝试创建一个新范围。但我无法弄清楚如何正确地连接变量和任务。

我想知道是否有人可以举例说明如何做到这一点。我想看一个代码示例。

我们可以将问题简化为:

取决于sbt flywayMigrate的命令flywayUrl。我们如何通过调用sbt命令允许命令使用不同的flywayUrl(或者其他任何方式都是好的)?

谢谢!

1 个答案:

答案 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:flywayMigratedev:flywayMigrate来迁移生产和开发。

有关其他示例,请参阅the Flyway docs page