2017-11-25 333 views
1

的disclude development.conf使用Scala的playframework 2.5,如何从泊坞窗影像创作发挥的框架应用神器

我使用SBT插件PlayScala构建应用程序,装入瓶内,

,然后建立并推动一个泊坞窗图像使用sbt插件DockerPlugin

驻留在源代码存储库conf/development.conf(与application.conf相同)。 application.conf的最后一行说include development这意味着如果存在development.conf,则其中的条目将覆盖application.conf中的某些条目,这样可以提供使应用程序立即可在本地运行的所有缺省值源代码从源代码控制克隆,零额外配置。这种技术可以让每一位新开发人员在正常工作的应用程序中正常工作,而不会浪费配置时间

完成架构设计的唯一缺失部分是找到一种方法,从应用程序的最终运行时排除development.conf - 否则这将覆盖泄漏到生产运行时,并且显然应用程序无法运行。

这可以通过各种不同的方式实现。

一种方法可能是如何将逻辑注入构建任务(作为sbt的一部分,我假设为PlayScala的一部分)以从jar工件中排除文件。 其他方式可能是将逻辑注入Docker镜像创建过程。这个逻辑可以手动执行它之前删除现有的罐子development.conf(假设这是可能的)

如果你实现提供的一个想法, 或者一些不同的架构方式,给出了同样的“开箱的“功能,请还跟分享:)

回答

2

我通常有相反的逻辑:

我使用application.conf文件(即播放默认使用),所有在本地运行所需要的东西。然后我有一个production.conf文件,它首先包含application.conf,然后覆盖必要的东西。

部署到生产(或分期)我指定的生产/ staging.conf文件中使用

+1

以下是Play文档中讨论如何将备用配置文件作为主文件的部分:https://www.playframework.com/documentation/2.6.x/ProductionConfiguration#Using--Dconfig.resource –

1

这是我如何解决它最终会。

conf/application.conf是生产就绪配置,它包含环境变量的占位符,值由服务的deployment.yaml文件在k8s中注入。

就在旁边,conf/development.conf - 它的第一行是include application.conf和它的其余部分都覆盖这将使应用程序通过一个简单的sbt run

是什么使上述工作运行开箱git clone之后,是增加了以下内容build.sbt的:

PlayKeys.devSettings := Seq( "config.resource" -> "development.conf" )

就像一个魅力:)

0

这可以通过SBT-本机打包的mappings配置键来完成:

mappings in Universal ~= (_.filterNot(_._1.name == "development.conf")) 

here