如何在play 2.0的几个环境中管理application.conf?

tot*_*shi 22 playframework-2.0

使用Play 1.2,我可以使用框架ID或应用程序模式为配置键添加前缀,如下所示:

# Production configuration
%prod.http.port=80
%prod.application.log=INFO
%prod.application.mode=prod
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于2.0.

有没有办法使它工作?

cof*_*ake 43

Play 2不会强制您使用任何特定方法来管理您的环境.但它为您提供了强大而灵活的工具,可以根据项目的需要自行实施.

例如,常见模式是将公共环境设置保存在一个文件中,并在其他文件中具有特定于环境的覆盖.为此,您需要一个自定义的Global对象(您可以将其直接放入./app/Global.scala).以下代码自Play 2.1.1(Scala 2.10)起有效:

import java.io.File
import play.api._
import com.typesafe.config.ConfigFactory

object Global extends GlobalSettings {
  override def onLoadConfig(config: Configuration, path: File, classloader: ClassLoader, mode: Mode.Mode): Configuration = {
    val modeSpecificConfig = config ++ Configuration(ConfigFactory.load(s"application.${mode.toString.toLowerCase}.conf"))
    super.onLoadConfig(modeSpecificConfig, path, classloader, mode)
  }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以把application.dev.conf,application.test.confapplication.prod.conf到您./conf与环境特定的覆盖(在保持通用设置application.conf).

在这个示例中,我们依赖于Play本身mode,这通常是有意义的,但您可以根据需要进行细化,并使用环境变量或任何您想要的.

另请参阅:Typesafe配置


Mag*_*nus 13

我已经有这个问题很长一段时间以下是我迄今为止学到的最好的方法,我在Play 2 google小组上提出类似的问题时得到了一个暗示.

在您的application.config中,使用以下语法在系统参数存在时覆盖配置值:

# Local machine fallback URI
mongodb.uri="mongodb://192.168.56.101:27017/application"
# Env variable override
mongodb.uri=${?MONGOLAB_URI}
Run Code Online (Sandbox Code Playgroud)

问号表示如果未设置,则不使用env变量覆盖.如果你只是使用$ {MONGOLAB_URI},你期望设置变量,并且我假设,如果没有设置,你会得到某种异常.

为了完整起见,以下是您如何阅读该值的示例:

lazy val mongoUri = current.configuration.getString("mongodb.uri").getOrElse("mongodb:///")
Run Code Online (Sandbox Code Playgroud)

使用这种方法有一点需要注意:确保将系统参数配置保留在某种SCM中.


Seb*_*ron 6

您必须使用适当的属性定义不同的配置文件

http://www.playframework.org/documentation/2.0/Configuration

还有一个包含机制可以帮助您在application.conf中定义默认值,并仅覆盖生产所需的内容

  • 我试图这样做,我面临的唯一问题是当我在`application.conf`和`prod.conf中有`db.default.driver,db.default.url,db.default.user等等`时`,prod.conf的一些原因它永远不会连接.但是,当我从application.conf中删除db设置并运行prod.conf时,它可以工作.是否有一个原因? (2认同)
  • 是的,似乎Play 2不允许您覆盖默认数据库参数. (2认同)