我有一个Play 2.3应用程序,在docs之后我可以构建一个debian软件包,当我想构建这样的东西时问题出现了:
我有dev, qa and prod
的不同配置,我想构建4个不同的包,一个包含代码,另一个包含配置。所以我会得到这4个包裹:
app-version.deb [this contains the code]
app-config-dev-version.deb [this contains the dev configuration]
app-config-qa-version.deb [this contains the qa configuration]
app-config-prod-version.deb [this contains the prod configuration]
但是对于安装app-version.deb,我需要其中一个作为依赖项,具体取决于计算机。
machine-dev: app-version.deb and app-config-dev-version.deb
machine-qa: app-version.deb and app-config-qa-version.deb
and so on ...
答案 0 :(得分:0)
根据我的经验,使用额外的debian软件包配置您的应用程序并不是一个好主意。对于播放应用程序,您可以使用其他更易于创建和维护的选项。
Play使用Typesafe Config Library。为每个环境创建配置文件,例如
conf/
reference.conf # contains default settings
dev.conf
qa.conf
prod.conf
现在如何定义哪一个被打包?那么有几个选择。
打包所有并在启动时选择使用:
./bin/your-app -Dconfig.resource=conf/prod.conf
这是直截了当的,如果您可以控制事情的开始,它就会起作用。
您可以在构建期间通过javaOptions in Universal
添加启动命令。您可以使用Command Alias或custom task
基本上你选择(例如使用上面的自定义任务)
配置为application.conf
。
mappings in Universal += {
val conf = (resourceDirectory in Compile).value / "reference.conf"
conf -> "conf/application.conf"
}
我建议不要这样做,因为你不知道你目前使用的是哪个包。
<强>更新强>
配置/范围更复杂,有时会以意想不到的方式表现。简单的替代方法是使用子模块。
your-app/
app
conf
..
dev/
qa/
prod/
您的build.sbt
将包含类似
lazy val app = project
.in(file("your-app"))
.enabledPlugins(PlayScala)
.settings(
// your settings
)
lazy val dev = project
.in(file("dev"))
// this one is tricky.
// Maybe it works when using the PlayScala Plugin
.enabledPlugins(PlayScala)
.settings(
// if you only use the JavaServerAppPackaging plugin
// you will need to specifiy a mainclass
//mainClass in Compile := Some("")
)
// ... rest the same way
最后,您使用dev/debian:packageBin
进行构建以进行开发。