2017-04-15 15 views
0

다음은 변수 교체를 제대로 처리하지 못했기 때문에 결국 사용하게되었습니다. 나는 함께 다음 HOCON 모두를 시도했습니다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" 
     ] 
    } 
    } 
} 

: 호환되지 않는 12 팩터 지역, 개발, 무대 및 생산 배포 할 수 있습니다 CORS 허용 기원에 대한 재생 프레임 워크 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 파일을 포함하십시오. 배포 구성에서 application.conf 대신 무대 구성을로드하십시오.

을 : 당신이 당신의 DEV-무대를 만들 경우, 배포 구성이 추가

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

당신의 application.dev.conf 파일은 다음과 같을 것이다 (당신이 고정 표시기와 SBT-네이티브 패키저를 사용하는 가정)

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

처럼 구성들을 포함 할 수있다 이것은 _an_ 대답이지만, 실제로 내가 원하는 것은 아닙니다 ... 좋은 지적을하고 질문을 실제로 포함하도록 업데이트했습니다. 12 요소 응용 프로그램에 대한 지침을 읽으면 환경을 통해 응용 프로그램 구성을 수정할 수 있어야한다는 것이 기본 요구 사항임을 알 수 있습니다. 물론 그것은 100 % 불가능합니다 (env-replacement 처방을 따르지 않는'reference.conf' 파일 임베디드), CORS 허용 기원이 가장 좋은 예는 아니지만 여전히 필요한 것입니다 풀다. – rbellamy

+0

그래, 내 질문의 두 번째 부분 인 "목록 항목 추가"에 대한 답변을 HOCON 목록에 추가했습니다. – rbellamy