Um dos recursos mais bacanas do Grails é a possibilidade de se possuir mais de um ambiente de execução (environment). A grosso modo, pode-se dizer que o environment representa uma configuração específica de banco de dados usada em determinada situação. Neste post não irei explicar como configurar seu acesso às suas bases de dados, mas sim alguns pontos pouco divulgados a respeito deste recurso.
Você pode ter quantos ambientes quiser!
Por padrão Grails nos fornece três ambientes: test, development e production que, respectivamente, são usados quando executamos nossos testes unitários/de integração, estamos programando e, finalmente, enviamos para o servidor de aplicações no qual o produto final do nosso trabalho será usado. O que poucos sabem é que na realidade podemos ter quantos ambientes de execução quisermos!
Para adicionar um novo ambiente de execução, basta adicionar mais um bloco de código dentro da seção environments como no exemplo abaixo:
environments { development { dataSource { dbCreate = "update" // one of 'create', 'create-drop','update' url = "jdbc:mysql://localhost/development" } } test { dataSource { dbCreate = "update" // one of 'create', 'create-drop','update' url = "jdbc:mysql://localhost/test" } } production { dataSource { dbCreate = "update" // one of 'create', 'create-drop','update' url = "jdbc:mysql://localhost/production" } } meu_ambiente { dataSource { dbCreate = "update" url = "jdbc:mysql://localhost/meu_BD_Louco" } } }
Para usar estes ambientes de execução adicionais na linha de comando, basta usar a sintaxe abaixo:
grails [nome do ambiente] [comando]
Exemplo:
grails meu_ambiente run-app
Simples assim.
Descobrir qual o ambiente escolhido em tempo de execução
Grails só permite que um ambiente seja usado por vez. Sendo assim, esta é uma informação importante que podemos usar a nosso favor quando estamos programando. Suponhamos que seja interessante habilitar comportamentos apenas em alguns ambientes de execução. Como você faria? Assim:
import grails.util.Environmentswitch(Environment.current) { case Environment.DEVELOPMENT: "Apenas para desenvolvimento" break case Environment.PRODUCTION: "Apenas para proução" break case "meu_environment" "Olha o meu environment aqui!" break }
Environments na inicialização da aplicação
No arquivo grails-app/conf/Bootstrap.groovy incluimos o código que desejamos ser executado quando nossa aplicação é inicializada. Como tirar proveito dos ambientes de execução nesta situação? De novo, como no código abaixo:
def init = { ServletContext ctx -> environments { production { // em produção } development { // em desenvolvimento } } ctx.setAttribute("foo", "bar") }
tenho um dog igual ao seu
Kiko, ótimo blog!
Para executar um comando no custom environment pelo menos na versão 1.3.1 é o seguinte:
grails -Dgrails.env=meu_ambiente run-app