2017-04-15 74 views
0

這是我最終使用的,因爲我似乎無法得到良好的順序變量替換。鑑於CORS允許起源的Play框架HOCON部分,它允許本地,開發,分期和生產部署,並且沒有12因數兼容:Typesafe config HOCON - 列表的環境變量替換指導?

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,同環境被設置爲顯示還有:

# 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"' 

而且......

# 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實現允許正則表達式,而WTH不玩?

這且不說,列出的HOCON處理一直是我很成問題......與第一執行上述工作,但任何迭代,我必須在application.conf沒有一個現有的默認列表...

通過環境變量替換向HOCON添加列表或列表項目的建議方法是什麼?

回答

1

如果我讀您的文章(我沒有看到有一個真正的「問題」)是正確的,你想找到一種方法,不同的值添加到您的CORS名單,這取決於你的環境的應用程序正在運行。

我建議從另一個角度來解決這個問題: 創建不同的配置文件,其中包含要定製的值幷包含一般application.conf文件。在你的部署配置中,讓play加載你的staged配置,而不是application.conf。

例如如果您創建開發階段,將它添加到您的部署配置(假設你使用SBT-本機打包帶泊塢窗)

javaOptions in Universal ++= Seq(
    "-Dconfig.resource=application.dev.conf" 
) 

您application.dev.conf文件應該是這樣的:

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因子的方法,你可以嘗試分裂(不斷變化的部分),你的名單分成類似

ORIGIN_1=http://localhost:8080 
ORIGIN_2=http://app.127.0.0.1.nip.io:8080 

,然後包括在您的配置一樣

play.filters.cors.allowedOrigins = [${?ORIGIN_1}] ${play.filters.cors.allowedOrigins} 
play.filters.cors.allowedOrigins = [${?ORIGIN_2}] ${play.filters.cors.allowedOrigins} 
+0

這是答案,但不是我正在尋找的東西...儘管你說得很好,我已經更新了我的問題,以便實際包含一個問題。如果您閱讀了12因子應用程序的指導,您會發現這是一個基本要求,您的應用程序的配置可以通過環境進行修改。當然,這是不可能100%的時間(嵌入式'reference.conf'文件不遵循env-replacement方案),也許CORS允許的起源不是最好的例子,但它仍然是我需要的東西解決。 – rbellamy

+0

是的,你回答了我的問題的第二部分 - 「添加一個列表項」到HOCON列表中 – rbellamy