关于部署:Play Framework-如何维护不同环境的配置文件?

Play Framework - How to maintain configuration files for different environments?

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

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


Play的文档中Specifying alternative configuration file部分很好地介绍了替代配置文件。

简而言之-在application.conf中,您放置了应用程序的默认配置,此外,您还需要为您的环境创建其他文件,例如。 life.confdev.conf等。在这些文件中,您首先需要包括application.conf(它将读取整个默认配置),然后仅覆盖必须更改的部分-即。数据库凭据,可能是dev.conf

1
2
3
4
5
6
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"

所以最后您以

的身份启动应用程序(在dist之后)

1
./start -Dconfig.resource=dev.conf

或使用Play控制台

1
play -Dconfig.resource=dev.conf run

一些提示:

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