2010-12-03 5 views
5

Actualización: a partir de Grails 1.3.6 uno tiene acceso al dominio completo de los scripts de Gant. De los Grails 1.3.6 release notes:secuencia de comandos única de Grails para llenar la base de datos

Ahora puede ejecutar uno o más scripts de Groovy desde la línea de comandos utilizando el comando run-script, p.

griales run-escritura [ruta-a-script-1] [ruta-a-script-2] ... [ruta-a-script-n]

Esto funciona en torno al tema en los scripts de Gant donde no se puede acceder cómodamente a las clases de aplicación, ya que no están disponibles en el classpath cuando se inician los scripts.


Hola a todos,

Soy nuevo en el uso de Grails (en un proyecto real) y tengo un guión de una sola vez necesito para ejecutar que lee un archivo y luego puebla mi base de datos.

Quería que el script se ejecutara en el contexto de mi aplicación grails, así que utilicé el comando create-script. Ahora entiendo que lo convierte en un guión 'Gant'. La razón de ello es que pensé que me permiten un fácil acceso a todos los griales de dominio buena-dad, de modo que yo sería capaz de hacer algo como esto fácilmente:

Car car = new Car(model: 'bar', brand: 'Ford') 
car.save() 

Aquí, Car es una de mis clases de dominio y las cadenas 'barra' y 'Ford' que he recuperado de mi archivo.

El inicio de mi guión se parece a esto:

import com.foo.Car  
grailsHome = Ant.project.properties."environment.GRAILS_HOME" 
includeTargets << new File ("${grailsHome}/scripts/Bootstrap.groovy") 
target(main: "a script for storing cars") { 
    depends(bootstrap, classpath) // code dealing with the file with cars follows 

Sorprendentemente, maravilloso me da una java.lang.NoClassDefFoundError: com.foo.Car cuando ejecuto el script con el comando grails LoadCars

estoy tomando un enfoque equivocado, o hay algo más simple que estoy haciendo mal?

cualquier ayuda se agradece

Respuesta

2

He actualizado el grails run-script Gant script (mencionado por Jared arriba) para trabajar con Grails 1.3.5. Tenía la intención de hacerlo por un tiempo, pero esta pregunta me empujó a finalmente llegar a eso).

sólo tiene que descargar el script descrito en el puesto, guardar en su griales "scripts" de directorio y, a continuación, puede ejecutar su propio script maravilloso para arrancar de datos con:

grails run-script script-path/boostrapMyDataIntoApp.groovy 
+0

gracias un montón Ted! –

1

que he tenido que hacer esto y hay que crear un script especial para permitirle acceder a GORM de un guión griales estándar. Ver this question para más información. No estoy seguro de cuál es el estado actual de la secuencia de comandos en Grails 1.3, pero el autor del guión publicado en los comentarios.

6

sé que las secuencias de comandos son útiles, y probablemente recibo correo de odio incluso por sugerirlo, pero acabo de incorporar este tipo de cosas directamente en mi aplicación en el pasado.

Tengo un indicador en mi configuración que indica si los datos deben ser bootstrap, si es así, el código de arranque busca un archivo delimitado por comas al inicio y llama a un método de servicio para cargar los datos.

1

Hans, hay varias opciones aquí , asumiendo que no está por pulir las secuencias de comandos de GANT 8 ^)

Entonces suponga que está haciendo alguna TDD en modo integración, ¿correcto? ¿Has consultado el plugin db-stuff? En realidad, uno aprovecha el paquete de código abierto (extensión del proyecto JUnit) llamado dbUnit, que también es una excelente elección, tanto para los proyectos de Java como de Groovy.

* db-stuff < 0.3.0> - gestión del esquema db e importación/exportación de datos. Genere archivos de esquema genéricos e importe o exporte datos de base/semilla/prueba en su base de datos.


he hecho tradicionalmente esto también en el sistema de arranque en función del entorno - y trato de no dejar que esos supuestos de dominio/restricciones se ponen demasiado lejos fuera de sincronización. con mi esquema

Aquí es el canon que estoy hablando:

class BootStrap { 

    def init = { servletContext -> 
     if (GrailsUtil.environment.equals(GrailsApplication.ENV_DEVELOPMENT)) { 
      log.info("Loading sample data for 2010 models...");    

      new Car(manufacturer: new Manufacturer(name: "Toyota"), model: "Prius") 
      new Car(manufacturer: new Manufacturer(name: "GM"), model: "Volt") 
//... 
+0

Hola mike, no estoy haciendo pruebas de integración, solo intento insertar un montón de registros de un archivo que me dieron. De todos modos, el enganche de arranque podría ser útil también y gracias por señalar el plugin db-stuff. –

+0

Entender ... hay alternativas al formato XML que utiliza dbunit para importar/exportar. Consulte http://www.dbunit.org/apidocs/org/dbunit/dataset/excel/XlsDataSet.html y http://dbunit.wikidot.com/demoimportexport si los archivos están en un formato que Excel puede leer. – mikesalera

Cuestiones relacionadas