【问题标题】:Play Framework - How to maintain configuration files for different environments?Play Framework - 如何维护不同环境的配置文件?
【发布时间】:2014-03-18 21:26:24
【问题描述】:

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

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

【问题讨论】:

    标签: deployment playframework sbt playframework-2.2 config-transformation


    【解决方案1】:

    Alternative configuration files 在 Play 的文档中很好地涵盖在 Specifying alternative configuration file 部分。

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

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

    ./start -Dconfig.resource=dev.conf
    

    或使用 Play 控制台

    play -Dconfig.resource=dev.conf run
    

    几个提示:

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

    【讨论】:

    • 可以,但是没有说如何生成配置文件变体,这是这里的核心问题。
    • 这不正是 biesor 刚刚向您描述的吗?包含将基于另一个仅覆盖您想要不同的设置的配置文件。
    • @johanandren 自从我第一次发表评论以来,答案已经扩大。我现在还看到文档中提到了“包含”技术;现在我知道了,很容易发现它,我希望对 Play 新手来说更明显......总而言之,这看起来确实是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多