2011-08-01 22 views
8

Estoy trabajando con bases de datos en mi script de compilación. Todos los detalles de la base de datos están en mi archivo de propiedades, pero me preguntaba cómo podría hacer que el usuario elija fácilmente qué conjunto de detalles usar. Estoy trabajando con Phing, pero como es muy similar a Ant, también aceptaré respuestas Ant.Elegir propiedades en los scripts de compilación Phing (y Ant)

Aquí es mi muestra build.properties:

# Connection details for the dev database 
db.dev.hostname=localhost 
db.dev.database=foo 
db.dev.username=foo_user 
db.dev.password=foo_password 

# Connection details for the staging database 
db.staging.hostname=some.remote.server 
db.staging.database=bar 
db.staging.username=bar_user 
db.staging.password=bar_password 

me gustaría ofrecer al usuario un simple indicador de generación para elegir qué base de datos utilizar. Supongamos que tengo una tarea de compilación para verificar un esquema de base de datos. Me gustaría ofrecer una bandera acumulación de este modo:

phing -Ddatabase=staging check-schema 

que deben utilizar el db.staging * propiedades de los detalles de la conexión de base de datos.. ¿Cómo puedo lograr tal cosa?

Respuesta

7

En los archivos de construcción Phing, puede anidar propiedades. Hacer eso obtendría la funcionalidad que está buscando.

<?xml version="1.0"?> 
<project name="test" default="init"> 
    <property name="database" value="staging" /> 
    <property name="db.dev.hostname" value="localhost" /> 
    <property name="db.staging.hostname" value="some.remote.server" /> 
    <property name="db.hostname" value="${db.${database}.hostname}" /> 

    <target name="init"> 
    <echo msg="${db.hostname}" /> 
    </target> 
</project> 

También puede que desee ver en la etiqueta de entrada para hacer las cosas más fáciles para los usuarios en lugar de especificar la opción de línea de comandos -D:

<input propertyname="database" validargs="dev,staging">Which database?</input> 
+0

impresionante! No sabía que las propiedades de anidación funcionaban (y encontré algunos informes de que no funcionaba, así que nunca lo intenté). En cuanto a la 'entrada', prefiero -D flags porque puedo hacer un script de nuevo desde el exterior (piense en conectar Phing en su precommitente de Git, por ejemplo). –

Cuestiones relacionadas