Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
771 views
in Technique[技术] by (71.8m points)

groovy - How to create a custom environment in Grails?

grails.util.Environment, defines a number of preconfigured environments

  • DEVELOPMENT
  • PRODUCTION
  • TEST
  • CUSTOM

When running a Grails command, the environment to use can be specified using a -Denv flag, e.g. grails run-app -Denv=test. You can also specify a block of code that is specific to a certain environment using closures such as:

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

These environment-specific closures can be used in Bootstrap.groovy and Config.groovy, are there other places?

Also, is it possible for me to define my own environment, e.g. PRE_PRODUCTION, such that it will work with the closures above and the -Denv flag?

Finally, can the CUSTOM environment be used with the -Denv flag?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

These environment-specific closures can be used in Bootstrap.groovy and Config.groovy, are there other places?

I don't think so... For other places, you would need to use the Generic Per Environment Execution block

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

Also, is it possible for me to define my own environment, e.g. PRE_PRODUCTION, such that it will work with the closures above and the -Denv flag?

Yeah, you should be able to just declare -Dgrails.env=pre_production and include the pre_production block in Bootstrap.groovy or Config.groovy (or a custom grails.util.Environment block as above)

edit

As you can see in the Grails source for Environment, this sort of custom environment will enumerate to Environment.CUSTOM, and then in the Environment.executeForCurrentEnvironment block, it will check against CUSTOM, and the name of the custom environment


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...