[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.플레이 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.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.당신이, 당신이 다음 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.이 글로벌 / 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.오프 주제하지만 당신은 12 인자 - 응용 프로그램은 다음 나쁜 환경의 이름을 딴 별도의 구성을 가진 따르는 경우 :
오프 주제하지만 당신은 12 인자 - 응용 프로그램은 다음 나쁜 환경의 이름을 딴 별도의 구성을 가진 따르는 경우 :
구성 관리의 또 다른 측면은 그룹입니다. 때로는 레일의 개발, 테스트 및 프로덕션 환경과 같은 특정의 전개함에 이름을 따서 명명 된 그룹 (종종 소위 "환경")로 일괄 설정 애플 리케이션. 이 방법은 완전히 확장되지 않습니다 응용 프로그램의 더 전개함에이 만들어지면, 새로운 환경 이름은 준비 또는 품질 보증으로, 필요합니다. 프로젝트가 더 성장함에 따라, 개발자는 응용 프로그램의 관리를 전개함에 매우 과민하게 설정의 조합 폭발의 결과로, Joes의-준비처럼 자신의 특별한 환경을 추가 할 수 있습니다
출처 : http://12factor.net/config
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
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 :지도의 컬렉션을 병합하는 방법 (0) | 2019.11.27 |
---|---|
[SCALA] 자바의 ClassName.class의 스칼라 이에 상응하는 무엇입니까? (0) | 2019.11.27 |
[SCALA] 스칼라 : 같음 / 해시 코드를위한 경우 클래스 필드를 무시? (0) | 2019.11.27 |
[SCALA] 왜 스칼라 패키지 오브젝트 내부 클래스는 dispreferred입니까? (0) | 2019.11.27 |
[SCALA] (22 개) 필드는 2.11 + 프레임 워크 2.3 케이스 클래스와 함수 플레이 스칼라 제한 (0) | 2019.11.27 |