(Quick Reference)

3.2 Entornos - Reference Documentation

Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith

Version: null

3.2 Entornos

Per Environment Configuration

Grails supports the concept of per environment configuration. The Config.groovy, DataSource.groovy, and BootStrap.groovy files in the grails-app/conf directory can use per-environment configuration using the syntax provided by ConfigSlurper. As an example consider the following default DataSource definition provided by Grails:

Configuración por entornos

Grails es compatible con el concepto de configuración por entornos. Los archivos Config.groovy, DataSource.groovy y BootStrap.groovy en el directorio grails-app/conf pueden utilizar configuración por entorno por medio con la sintaxis proporcionada por ConfigSlurper. Como ejemplo, considere la siguiente definición por defecto del DataSource proporcionada por Grails:

dataSource {
    pooled = false
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
}
environments {
    development {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

Notice how the common configuration is provided at the top level and then an environments block specifies per environment settings for the dbCreate and url properties of the DataSource.

Packaging and Running for Different Environments

Grails' command line has built in capabilities to execute any command within the context of a specific environment. The format is:

grails [environment] [command name]

Observe cómo la configuración común se proporciona en el nivel superior y, a continuación, especifica un bloque environments especificando valores por entorno para dbCreate y la propiedad url para el DataSource.

Empaquetado y ejecución para distintos entornos

La línea de comando de Grails tiene capacidad para ejecutar cualquier comando dentro del contexto de un entorno específico. El formato es:

Grails [entorno] [nombre de comando]

In addition, there are 3 preset environments known to Grails: dev, prod, and test for development, production and test. For example to create a WAR for the test environment you wound run:

grails test war

To target other environments you can pass a grails.env variable to any command:

grails -Dgrails.env=UAT run-app

Además, hay 3 entornos preestablecidos para Grails: dev, prod, y test, para development, production y test. Por ejemplo, para crear un WAR para el entorno de test puede ejecutar:

grails test war

Para otros entornos puede pasar una variable grails.env para cualquier comando:

Grails-Dgrails.env=UAT run-app

Programmatic Environment Detection

Within your code, such as in a Gant script or a bootstrap class you can detect the environment using the Environment class:

Detección de entorno mediante programación

Dentro del código, como en un script de Gant o una clase de bootstrap se puede detectar el entorno mediante la clase Environment:

import grails.util.Environment

...

switch (Environment.current) { case Environment.DEVELOPMENT: configureForDevelopment() break case Environment.PRODUCTION: configureForProduction() break }

Per Environment Bootstrapping

Its often desirable to run code when your application starts up on a per-environment basis. To do so you can use the grails-app/conf/BootStrap.groovy file's support for per-environment execution:

Bootstrap por entorno

A menudo es deseable ejecutar código cuando la aplicación se inicia dependiendo del entorno. Para ello puede utilizar el soporte por entornos del archivo grails-app/conf/BootStrap.groovy :

def init = { ServletContext ctx ->
    environments {
        production {
            ctx.setAttribute("env", "prod")
        }
        development {
            ctx.setAttribute("env", "dev")
        }
    }
    ctx.setAttribute("foo", "bar")
}

Generic Per Environment Execution

The previous BootStrap example uses the grails.util.Environment class internally to execute. You can also use this class yourself to execute your own environment specific logic:

Ejecución genérica por entorno

En el ejemplo anterior de BootStrap se utiliza la clase grails.util.Environment internamente para ejecutar. También puede utilizar esta clase para ejecutar su propia lógica específica del entorno:

Environment.executeForCurrentEnvironment {
    production {
        // hacer algo en producción
    }
    development {
        // hacer algo en desarrollo
    }
}