Domanda

Aggiornamento: come di Grails 1.3.6 ha accesso alla piena dominio da script Gant. Dalle Grails 1.3.6 note di rilascio :

È ora possibile eseguire una o più Groovy script dalla riga di comando utilizzando il comando Esegui-script, per esempio.

graal corrono-script [path-to-script-1] [percorso-to-script-2] ... [path-to-script-n]

Questo funziona in tutto il problema negli script Gant dove si possono classi di applicazione non comodamente accedere dal momento che non sono disponibili nel classpath quando gli script di avvio.


Ciao a tutti,

Sono nuovo di utilizzare Grails (in un vero e proprio progetto) e ho un'una tantum script che ho bisogno di eseguire che legge un file e quindi popola il mio database.

ho voluto lo script da eseguire nel contesto del mio graal app, quindi ho usato il comando create-script. Ora capisco che lo rende uno script 'Gant'. La ragione per farlo è che ho pensato che mi avrebbe permesso un facile accesso a tutte le dominio Grails bene-ness, in modo che io sarei in grado di fare qualcosa di simile con facilità:

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

Qui, auto è una delle mie classi di dominio e le stringhe 'bar' e 'Ford' ho recuperato dal mio file.

L'inizio del mio aspetto script come questo:

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, scanalato mi dà una java.lang.NoClassDefFoundError: com.foo.Car quando eseguo lo script con il comando grails LoadCars

Sono io prendo l'approccio sbagliato, o c'è qualcosa di più semplice che sto facendo male?

Ogni aiuto è apprezzato

È stato utile?

Soluzione

Ho aggiornato il Esegui-script graal Gant sceneggiatura (di cui da Jared sopra) per lavorare con Grails 1.3.5. Avevo in mente di farlo per un po ', ma questa domanda mi diede una gomitata in finalmente andare in giro ad esso).

Basta scaricare lo script descritto nel post, salvarlo nella graal "script" directory e quindi è possibile eseguire il proprio script Groovy ai dati bootstrap con:

grails run-script script-path/boostrapMyDataIntoApp.groovy

Altri suggerimenti

so che gli script sono utili, e io probabilmente ottenere la posta di odio anche per suggerire, ma ho appena incorporare questo genere di roba direttamente nella mia applicazione in passato.

Ho una serie di bandiera nella mia configurazione che indica se i dati devono essere bootstrap, in caso affermativo, gli sguardi codice di bootstrap per una virgola file delimitato all'avvio e chiama un metodo di servizio per caricare i dati.

ho avuto a che fare questo e si deve creare uno script speciale per consentire l'accesso GORM da uno script graal standard. Vedere questa domanda per maggiori informazioni. Non sono sicuro di quello che è lo stato corrente dello script sotto graal 1.3 ma l'autore dello script ha registrato nei commenti.

Hans, ci sono diverse scelte qui, assumendo che non è fuori per lucidare la scripting GANT braciole 8 ^)

Quindi, dare per scontato che si sta facendo un po 'di TDD integrazione-modo, giusto? Hai guardato nel plugin di db-stuff? In realtà che si sfrutta il pacchetto open source (estensione del progetto JUnit) chiamato DBUnit, che è anche una scelta eccellente, sia per i progetti Java e Groovy.

* db-stuff <0.3.0> - db schema di managment e export / import dati. Generare file di schema generici ed i dati di importazione o di esportazione di base / seme / prova nel database.


Ho tradizionalmente fatto anche questo nel bootstrap a seconda dell'ambiente - e cerco di non lasciare mai che quelle ipotesi dominio / vincoli diventano troppo fuori sincronia. con il mio schema.

Ecco il canone di cui sto parlando:

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" )
//...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top