복붙노트

[SCALA] 어떻게 플레이 2.0 환경에 따라 서로 다른 데이터베이스를 설정하는 방법?

SCALA

어떻게 플레이 2.0 환경에 따라 서로 다른 데이터베이스를 설정하는 방법?

나는 시험, 지역 및 생산 (생산 Heroku가 있습니다) 환경에서 서로 다른 데이터베이스를 사용하여 내 재생 응용 프로그램을 싶습니다.

application.conf에서 내가 가진 :

db.default.driver=org.postgresql.Driver 

%dev.db.default.url="jdbc:postgresql://localhost/foobar" 
%test.db.default.url="jdbc:postgresql://localhost/foobar-test" 
%prod.db.default.url=${DATABASE_URL} 

이 작동하지 않습니다. 나는 플레이 테스트 또는 놀이 실행을 실행하면, 모든 DB 접속 실패 :

 Configuration error [Missing configuration [db.default.url]] (Configuration.scala:258) 

나는 이것에 대해 몇 가지 질문이있다 :

해결법

  1. ==============================

    1.플레이 2에서 다른 설정 환경이 아니다. 대신 당신은 단지 설정하거나 conf의 / application.conf 파일의 구성 매개 변수를 무시합니다. 그것을 할 수있는 한 가지 방법은 같은 재생 명령 행에 있습니다 :

    플레이 2에서 다른 설정 환경이 아니다. 대신 당신은 단지 설정하거나 conf의 / application.conf 파일의 구성 매개 변수를 무시합니다. 그것을 할 수있는 한 가지 방법은 같은 재생 명령 행에 있습니다 :

    play -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL ~run
    

    또한 다른 설정 파일을 사용하여 재생을 알 수 있습니다 :

    play -Dconfig.file=conf/prod.conf ~run
    

    Heroku가에 대한 예를 Procfile은 다음을 참조하십시오 https://github.com/jamesward/play2bars/blob/scala-anorm/Procfile

    재생 문서에서 자세한 내용 : http://www.playframework.org/documentation/2.0/Configuration

  2. ==============================

    2.플레이 2.1.1에서 적어도 그들이이 설정되어있는 경우, 환경 변수 설정 값을 대체 할 가능성이있다. (자세한 내용은 참조하십시오 : http://www.playframework.com/documentation/2.1.1/ProductionConfiguration)

    플레이 2.1.1에서 적어도 그들이이 설정되어있는 경우, 환경 변수 설정 값을 대체 할 가능성이있다. (자세한 내용은 참조하십시오 : http://www.playframework.com/documentation/2.1.1/ProductionConfiguration)

    사용자가 설정할 수 있도록 당신의 conf / application.conf에 다음과 같은 :

    db.default.url="jdbc:mysql://localhost:3306/my-db-name"
    db.default.url=${?DATABASE_URL_DB}
    

    환경 변수 DATABASE_URL_DB이 값을 정의하지 않는 한, 기본적으로는 정의 된 JDBC-URL을 사용합니다. 당신은 단지 구성 및 생산 단계에 대한 개발 데이터베이스를 설정 그래서 당신은 환경 변수를 정의합니다.

    당신이 인용 된 문자열 안에 당신의 변수 참조를 넣어하지만이 대체 작동하지 않습니다주의 :

    db.default.url="jdbc:${?DATABASE_URL_DB}"
    

    대신에, 단지 예를 들어, 대체 할 수있는 부분을 맺다.

    database_host = "localhost"
    database_host = ${?ENV_DATABASE_HOST}
    db.default.url="jdbc:mysql://"${?database_host}":3306/my-db-name"
    

    환경 변수 ENV_DATABASE_HOST가 설정되지 않은 경우이 예에서, 로컬 호스트가 기본적으로 사용됩니다. (자세한 내용은 참조하십시오 : https://www.playframework.com/documentation/2.5.x/ConfigFile#substitutions)

  3. ==============================

    3.당신이, 당신이 다음 Play.isTest 경우 설정 값 확인을로드 할 때와로드 속성 앞에 경우 실제로는 여전히 플레이 2, 재생 1.0 설정 값 명명 방법을 사용할 수 있습니다 '테스트를.'. 여기에 잘린이다 :

    당신이, 당신이 다음 Play.isTest 경우 설정 값 확인을로드 할 때와로드 속성 앞에 경우 실제로는 여전히 플레이 2, 재생 1.0 설정 값 명명 방법을 사용할 수 있습니다 '테스트를.'. 여기에 잘린이다 :

    def configPrefix = if (play.api.Play.isTest) "test." else ""
    
    def configStr(path: String) =
      Play.configuration.getString(configPrefix + path) getOrElse
         die(s"Config value missing: $configPrefix$path")
    
    new RelDb(
      server = configStr("pgsql.server"),
      port = configStr("pgsql.port"),
      database = configStr("pgsql.database"),
      user = ...,
      password = ...)
    

    그리고 관련 설정은 니펫을 :

    pgsql.server="192.168.0.123"
    pgsql.port="5432"
    pgsql.database="prod"
    ...
    
    test.pgsql.server="192.168.0.123"
    test.pgsql.port="5432"
    test.pgsql.database="test"
    ...
    

    지금 당신은 당신이 당신의 E2E 테스트 스위트를 실행하면 모든 시스템 속성을 설정 기억 할 필요가 없습니다, 당신은 실수로 자극 데이터베이스에 연결되지 않습니다.

    난 당신이 선택적으로 테스트를 배치 할 수 있다고 가정합니다. 그런 다음 내가 생각하는 주요 설정 파일의 끝 부분에 포함 할 것 별도의 파일에서 값.

  4. ==============================

    4.이 글로벌 / GlobalSettings 방법 onLoadConfig를 대체 할 또 다른 접근 방식이며,에서 거기 수있는 일반 설정 아래 같은 특정 환경 구성 설정 응용 프로그램 구성이 ...

    이 글로벌 / GlobalSettings 방법 onLoadConfig를 대체 할 또 다른 접근 방식이며,에서 거기 수있는 일반 설정 아래 같은 특정 환경 구성 설정 응용 프로그램 구성이 ...

    conf/application.conf --> configurations common for all environment
    conf/dev/application.conf --> configurations for development environment
    conf/test/application.conf --> configurations for testing environment
    
    conf/prod/application.conf --> configurations for production environment
    

    당신은 내 샘플 구현을 위해 http://bit.ly/1AiZvX5를 확인할 수 있습니다.

    희망이 도움이됩니다.

  5. ==============================

    5.오프 주제하지만 당신은 12 인자 - 응용 프로그램은 다음 나쁜 환경의 이름을 딴 별도의 구성을 가진 따르는 경우 :

    오프 주제하지만 당신은 12 인자 - 응용 프로그램은 다음 나쁜 환경의 이름을 딴 별도의 구성을 가진 따르는 경우 :

    구성 관리의 또 다른 측면은 그룹입니다. 때로는 레일의 개발, 테스트 및 프로덕션 환경과 같은 특정의 전개함에 이름을 따서 명명 된 그룹 (종종 소위 "환경")로 일괄 설정 애플 리케이션. 이 방법은 완전히 확장되지 않습니다 응용 프로그램의 더 전개함에이 만들어지면, 새로운 환경 이름은 준비 또는 품질 보증으로, 필요합니다. 프로젝트가 더 성장함에 따라, 개발자는 응용 프로그램의 관리를 전개함에 매우 과민하게 설정의 조합 폭발의 결과로, Joes의-준비처럼 자신의 특별한 환경을 추가 할 수 있습니다

    출처 : http://12factor.net/config

  6. from https://stackoverflow.com/questions/10391987/how-to-set-up-different-databases-per-environment-in-play-2-0 by cc-by-sa and MIT license