Play Framework - 如何维护不同环境的配置文件?

akn*_*ds1 5 deployment sbt playframework config-transformation playframework-2.2

对于我的Play 2.2/Scala应用程序(使用SBT构建),我想根据我正在部署的环境部署不同的配置文件(例如,将部署与特定数据库服务器耦合).如何为不同的部署目标创建应用程序配置文件(conf/application.conf)的不同变体?希望可以从基础版本生成变体?

我从.NET习惯的是拥有一个基本配置文件(Web.config),它根据正在部署的配置文件(例如生产)进行一定的转换.是否在Play/Scala世界中使用类似的技术?

bie*_*ior 17

备注配置文件在Play的文档中有很好的介绍Specifying alternative configuration file.

简而言之 - application.conf您可以放置​​应用程序的默认配置,此外还需要为您的环境创建其他文件,即.life.conf,dev.conf等等.在这些文件中,你首先需要包含application.conf(这将读取整个默认配置)和未来只是简单地覆盖具有部分改变-即.数据库凭据,可能是dev.conf:

include "application.conf"

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:alternative-database-for-dev-testing"
db.default.user=developer
db.default.password="developerpass"
Run Code Online (Sandbox Code Playgroud)

所以最后你开始你的应用程序(之后dist)

./start -Dconfig.resource=dev.conf
Run Code Online (Sandbox Code Playgroud)

或者使用Play控制台

play -Dconfig.resource=dev.conf run
Run Code Online (Sandbox Code Playgroud)

几个提示:

  • 不要将"生命"数据库凭据放在默认application.conf文件中是个好主意,如果某个开发人员忘记包含他dev.conf不会损坏生产数据库,而应该将其放入prod.conf.
  • 此外,这些附加配置不应放在任何VCS(即.git)存储库中 - 直接在目标计算机上创建它们(并忽略存储库中),确保不知道生命数据库凭据的人不会看到它.
  • 也可以使用远程备用配置文件,这可能很有用,即.当您部署同一个应用程序的多个实例时,即.在云中的几个主机上.
  • 每个开发人员都可以拥有自己的配置文件dev_aknuds1.conf,dev_biesior.conf等等,因此您可以dev_*.conf在repo中使用一个模式忽略它们.
  • 最后你可以创建一个shell脚本(unix)或bat文件(Windows)来开始使用选择的配置文件等start_dev.sh,run_dev.sh所以你不需要-Dconfig.resource=...每次都写