定义自定义grails环境

定义自定义grails环境,grails,groovy,Grails,Groovy,基于,我想我可以在(例如)resources.groovy def currentEnv = Environment.current if (currentEnv == Environment.CUSTOM && currentEnv.name == 'mock') { println 'Do some stuff for the mock env' } if语句中的代码应该在我运行时执行(例如)grails run app-Denv=mock,但事实并非如此,我做错了

基于,我想我可以在(例如)
resources.groovy

def currentEnv = Environment.current
if (currentEnv == Environment.CUSTOM && currentEnv.name == 'mock') {
    println 'Do some stuff for the mock env'
}

if语句中的代码应该在我运行时执行(例如)
grails run app-Denv=mock
,但事实并非如此,我做错了什么?

您必须使用方法
Environment.executeForCurrentEnvironment()
,如下所示:

import grails.util.Environment

     grails.util.Environment.executeForCurrentEnvironment {
         development {
             println 'Running in DEV mode.'
         }
         production {
             println 'Running in production mode.'
         }
         mock {
             println 'Running in custom "mock" mode.'
         }
     }
并以这种方式调用grails:
grails-Dgrails.env=mock run app


请看mrhaki。请注意,如果定义了多个自定义环境,这可能是一个问题。我正在使用Grails2.4.4。如果我定义了mytest和myqa环境,这两个环境都将由Grails执行,因为它们都是environment.CUSTOM,这意味着一些bean定义被覆盖或配置错误

 grails.util.Environment.executeForCurrentEnvironment {
     development {
         println 'Running in DEV mode.'
     }
     mytest {
         println 'This will be evaluated because it is CUSTOM'
     }
     myqa {
         println 'This will ALSO be evaluated because it is CUSTOM. Yikes!'
     }
 }
我不知道这是一个bug还是故意的。不管怎样,我是这样做的,这似乎很有效:

 switch(Environment.current.name) {
     case 'development':
         println 'Running in DEV mode.'
         break

     case 'mytest':
         println 'Running in mytest mode'
         break

     case 'myqa':
         println 'Running in myqa mode'
         break
 }

这不起作用@Dónal的方式,因为他称圣杯是错误的。他的逻辑很好,但他需要使用-Dgrails.env而不是-DenvI,我使用的是grails 2.3.2,而这个带有Environment.executeForCurrentEnvironment和自定义环境的解决方案对我不起作用。这与ENV I set grails(dev或prod)无关,它总是打印“在自定义“mock”模式下运行”,然后打印我设置的当前环境(dev或prod),知道为什么吗?