首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typesafe配置HOCON -环境变量替换列表指南?

Typesafe配置HOCON -环境变量替换列表指南?
EN

Stack Overflow用户
提问于 2017-04-15 16:29:38
回答 1查看 988关注 0票数 0

下面是我最后使用的内容,因为我似乎无法很好地得到变量替换。考虑到CORS的Play Framework HOCON部分允许起源,它允许本地、开发、阶段和生产部署,并且不兼容12因素:

代码语言:javascript
复制
play {
  # https://www.playframework.com/documentation/2.5.x/resources/confs/filters-helpers/reference.conf
  filters {
    # use default values for gzip, csrf & security headers
    # setup cors
    cors {
      # whitelist all paths
      pathPrefixes = ["/"]
      allowedOrigins = [
        "http://localhost:8080"
        "http://app.127.0.0.1.nip.io:8080"
        "http://app.192.168.64.2.nip.io"
        "http://app.192.168.42.173.nip.io"
        "http://app.terradatum.local"
        "http://app.dev.terradatum.com"
        "https://app.dev.terradatum.com"
        "http://app.stage.terradatum.com"
        "https://app.stage.terradatum.com"
        "http://app.terradatum.com"
        "https://app.terradatum.com"
      ]
    }
  }
}

我尝试了以下两种HOCON,环境设置也如图所示:

代码语言:javascript
复制
# HOCON
allowedOrigins = ${?APP_ALLOWED_ORIGINS}
# ENV
export APP_ALLOWED_ORIGINS='"http://app.127.0.0.1.nip.io:8080","http://app.192.168.64.2.nip.io","http://app.192.168.42.173.nip.io","http://app.terradatum.local","http://app.dev.terradatum.com","https://app.dev.terradatum.com","http://app.stage.terradatum.com","https://app.stage.terradatum.com","http://app.terradatum.com","https://app.terradatum.com"'

还有..。

代码语言:javascript
复制
# HOCON
allowedOrigins = [
  ${?APP_ALLOWED_ORIGINS}
  "http://app.127.0.0.1.nip.io:8080"
  "http://app.192.168.64.2.nip.io"
  "http://app.192.168.42.173.nip.io"
  "http://app.terradatum.local"
  "http://app.dev.terradatum.com"
  "https://app.dev.terradatum.com"
  "http://app.stage.terradatum.com"
  "https://app.stage.terradatum.com"
  "http://app.terradatum.com"
  "https://app.terradatum.com"
]
# ENV
export APP_ALLOWED_ORIGINS="http://some-new-cors.terradatum.com\nhttps://some-new-cors.terradatum.com\n"

许多其他CORS实现都允许regex,而WTH不起作用?

撇开这点不说,名单的HOCON处理对我来说很成问题.使用上面的第一个实现,但是在application.conf失败中有一个现有的默认列表的任何迭代.

通过环境变量替换向HOCON添加列表或列表项的推荐方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-15 20:22:58

如果我读了你的帖子(我在里面没有看到一个真正的“问题”),你就会想办法给你的CORS列表添加不同的值,这取决于你的应用程序运行的环境。

我建议从另一个角度来解决这个问题:创建不同的配置文件,其中包含要自定义的值,并包含一般的application.conf文件。在您的部署配置中,让play加载您的分阶段配置,而不是application.conf。

例如,如果您创建了开发阶段,那么将其添加到您的部署配置中(假设您使用的是带有docker的sbt本机包)

代码语言:javascript
复制
javaOptions in Universal ++= Seq(
  "-Dconfig.resource=application.dev.conf"
)

您的application.dev.conf文件如下所示:

代码语言:javascript
复制
include "application.conf"
play.filters.cors {
      # whitelist all paths
      pathPrefixes = ["/"]
      allowedOrigins = [
        "http://localhost:8080"
        "http://app.127.0.0.1.nip.io:8080"
        "http://app.192.168.64.2.nip.io"
        "http://app.192.168.42.173.nip.io"
        "http://app.terradatum.local"
        "http://app.dev.terradatum.com"
        "https://app.dev.terradatum.com"

      ]
    }

问题是,您的环境变量不是一个列表,而是一个字符串。HOCON中没有将字符串拆分为列表的转换方法。

要遵循12因子方法,您可以尝试将列表中的更改部分拆分为以下内容:

代码语言:javascript
复制
ORIGIN_1=http://localhost:8080
ORIGIN_2=http://app.127.0.0.1.nip.io:8080

然后将那些包括在您的配置中,如

代码语言:javascript
复制
play.filters.cors.allowedOrigins = [${?ORIGIN_1}] ${play.filters.cors.allowedOrigins}
play.filters.cors.allowedOrigins = [${?ORIGIN_2}] ${play.filters.cors.allowedOrigins}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43428466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档