我已经浏览了一下,但我不清楚如何为Play框架应用程序配置一组特定于环境的变量。
作为一个例子,我想使用像h2这样的内存数据库进行本地开发,但是当我转移到生产环境或我的预生产环境时,我想连接到postgres数据库。
如何配置我的应用,以便它将使用与其部署的环境相关的变量?这是一个Scala Play应用程序。
答案 0 :(得分:6)
一个选项(如优秀游戏docs中所述)是在app启动期间指定conf文件。
使用-Dconfig.resource
将在应用程序类路径中搜索备用配置文件(通常在打包之前将这些备用配置文件提供到应用程序conf /目录中)。播放将调查conf /所以你不必添加conf /.
$ /path/to/bin/<project-name> -Dconfig.resource=prod.conf
使用-Dconfig.file
,您可以指定未打包到应用程序工件中的特定于环境的配置文件:
$ start -Dconfig.file=/opt/conf/prod.conf
使用-Dconfig.url
您还可以指定要从任何URL加载的配置文件:
$ start -Dconfig.url=http://conf.mycompany.com/conf/prod.conf
请注意,您始终可以使用include指令在新的prod.conf文件中引用原始配置文件,例如:
include "application.conf"
key.to.override=blah
答案 1 :(得分:0)
您可以使用Puppet或一些类似的工具在environment.conf中生成所需的参数并放在专用目录中。
然后在application.conf中,在文件的末尾,有这个:
include "file:///[your directory...]/environment.conf"
覆盖上面列出的任何测试或本地值(例如,DB参数)
答案 2 :(得分:0)
您可以通过覆盖onLoadConfig
对象的Global
方法来使用不同的配置文件,如:
object Global extends GlobalSettings {
override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode): Configuration = {
val fileName = s"application.${mode.toString.toLowerCase}.conf"
config ++ Configuration(ConfigFactory.load(fileName))
}
}
这样,您可以将“application.test.conf”用于测试模式,将“application.dev.conf”用于开发模式,而您可以通过“-Dconfig.file”参数在生产中使用另一个配置文件。