2011-03-16 8 views
10

grails.util.Environment은 사전 환경Grails에서 맞춤 환경을 만드는 방법은 무엇입니까?

  • 개발의 수를 정의
  • 생산
  • TEST
  • CUSTOM

Grails의 명령을 실행, 사용하는 환경은을 사용하여 지정할 수 있습니다 -Denv 플래그 (예 : grails run-app -Denv=test. 당신은 또한 다음과 같은 폐쇄를 사용하여 특정 환경에 특정 코드 블록을 지정할 수 있습니다

environments { 
    production { 
     grails.serverURL = "http://www.changeme.com" 
    } 
    development { 
     grails.serverURL = "http://localhost:8080/${appName}" 
    } 
    test { 
     grails.serverURL = "http://localhost:8080/${appName}" 
    } 
} 

이 환경 관련 클로저 Bootstrap.groovy에서 사용할 수 있으며 Config.groovy을, 거기에 다른 곳은?

또한 내 자신의 환경을 정의 할 수 있습니까? 예 : PRE_PRODUCTION 위와 같은 클로저 및 -Denv 플래그와 함께 사용할 수 있습니까?

마지막으로 -Denv 플래그와 함께 CUSTOM 환경을 사용할 수 있습니까?

답변

15

Bootstrap.groovy 및 Config.groovy 파일에서 사용할 수있는 이 환경 관련 클로저, 거기에 다른 장소는? 나를 내 자신의 환경을 정의하는 내가 너무 ... 다른 장소를 들어, Generic Per Environment Execution 블록

Environment.executeForCurrentEnvironment { 
    production { 
     // do something in production 
    } 
    development { 
     // do something only in development 
    } 
    pre_production { 
     // do something for your custom environment 
    } 
} 
또한

를 사용해야합니다 생각하지 않습니다

은 가능한가 예 PRE_PRODUCTION 위와 같은 클로저와 함께 과 -Denv 플래그를 사용할 수 있습니까?

그래, 당신은 단지 -Dgrails.env=pre_production를 선언 할 수 있어야하고, Bootstrap.groovy 또는 Config.groovy 파일 (또는 위의 정의 grails.util.Environment 블록)

편집

으로의 pre_production 블록을 포함해야한다 Grails source for Environment에서 사용자 정의 환경의이 종류가 Environment.CUSTOM으로 열거되고 Environment.executeForCurrentEnvironment 블록에서 check against CUSTOM, and the name of the custom environment

+0

감사합니다,'PRE_PRODUCTION'는'grails.utils.Environment' 열거에 추가됩니다한다면 어떤 생각? 런타임시에 상수를 enum에 추가 할 수 있다고 생각하지 않기 때문에 이것은 거의 불가능합니다. –

+1

이 답변을 업데이트했습니다. Enum에 추가하지 않습니다. 사용자 환경의 이름에'String'을 사용하여 'Environment.CUSTOM' 플래그가 붙습니다. –

+0

감사합니다. 사용자 정의 환경 목록을 어디서나 구성 할 필요가없는 것처럼 보입니다. 위와 같이 사용하면됩니다. –

4

사용자 지정 환경을 만들면 environments {} 블록이 사용되는 곳이면 어디에서나 사용할 수 있습니다. 예를 들어 Bootstrap.groovyConfig.groovy 외에도 DataSource.groovySearchable.groovy과 같은 다른 구성 파일에서도 사용할 수 있습니다.

또한, 나는

Environment.currentEnvironment.name이 경우 'pre_production'를 반환합니다 생각합니다.여기

관련 문제