Frage

Update: , wie von Grails 1.3.6 hat man Zugriff auf die gesamte Domäne von Gant-Skripten. Aus der Grails 1.3.6 Release Notes :

Sie können jetzt laufen einen oder mehr Groovy-Skripte von der Kommandozeile des Lauf Script-Befehl verwenden, z.

Grails run-Skript [path-to-Skript-1] [Pfad-to-Skript-2] ... [path-to-Skript-n]

Dies funktioniert, um das Problem in Gant-Skripte, wo Sie können nicht bequem Zugang Anwendungsklassen, da sie in dem Classpath nicht verfügbar sind, wenn die Skripte zu starten.


Hallo,

Ich bin neu zur Verwendung von Grails (in einem realen Projekt), und ich habe eine einmalige Skript muss ich ausführen, dass eine Datei liest und dann füllt meine Datenbank.

wollte ich das Skript ausgeführt werden sollen im Rahmen meiner Grails-Anwendung, so dass ich den create-Script-Befehl verwendet. Ich verstehe jetzt, dass macht es zu einem ‚Gant‘ Skript. Der Grund dafür war, so dass ich dachte, es mir leicht Zugang zu alle Grails Domain guter Heit erlauben würde, so dass ich in der Lage sein würde, so etwas wie dies leicht zu tun:

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

Hier Auto ist eine meiner Domain-Klassen und die Saiten ‚bar‘ und ‚Ford‘ ich aus meiner Datei abgerufen haben.

Der Anfang meiner Skript sieht wie folgt aus:

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

Überraschenderweise groovy gibt mir ein java.lang.NoClassDefFoundError: com.foo.Car, wenn ich das Skript mit dem Befehl ausführen grails LoadCars

Am ich den falschen Ansatz, oder gibt es etwas einfacher mache ich falsch?

Jede Hilfe ist willkommen

War es hilfreich?

Lösung

Ich habe die Grails run-Skript Gant Skript (nach Jared oben) zur Arbeit mit Grails 1.3.5. Ich hatte das heißt es für eine Weile zu tun, aber diese Frage stupste mich in schließlich, um es zu umgehen).

Laden Sie einfach das Skript in der Post beschrieben, speichern Sie es in Ihrem Grails „scripts“ Verzeichnis und Sie können Ihre eigene groovy Skript Bootstrap-Daten mit dann ausführen:

grails run-script script-path/boostrapMyDataIntoApp.groovy

Andere Tipps

ich weiß, dass die Skripte sind nützlich, und ich werde wahrscheinlich Drohbriefe bekommt es sogar darauf hindeutet, aber ich habe nur diese irgendwie Sachen Einbeziehung direkt in meine Anwendung in der Vergangenheit.

Ich habe ein Flag gesetzt in meiner Konfiguration, die, wenn die Daten Bootstrap werden sollten, wenn dies der Fall, werden die Bootstrap-Code sieht für ein Komma Datei beim Start begrenzt und ruft ein Service-Methode, um die Daten zu laden.

Ich habe dies zu tun, und Sie haben ein spezielles Skript erstellen, die Sie von einem Standard grails Skript Zugang GORM zu ermöglichen. Siehe diese Frage für weitere Informationen. Ich bin mir nicht sicher, was der aktuelle Status des Skripts ist unter Grails 1.3, aber der Autor des Drehbuchs geschrieben in den Kommentaren.

Hans, gibt es mehrere Möglichkeiten hier, vorausgesetzt, Sie sind nicht aus dem GANT-Scripting zu polieren hackt 8 ^)

annehmen Damit Sie einige Integrations-Modus TDD tun, richtig? Haben Sie in die db-stuff Plugin geschaut? Eigentlich, dass man nutzt das Open-Source-Paket (Erweiterung des JUnit-Projektes) genannt DBUnit, die auch eine hervorragende Wahl ist, sowohl für Java und Groovy-Projekte.

* db-stuff <0.3.0> - db Schema Management und Daten-Import / Export. Generieren Sie allgemeine Schema-Dateien und Import oder Export-Basis / Samen / Testdaten in der Datenbank.


Ich habe dies traditionell getan, wie auch in der Bootstrap abhängig von der Umgebung - und ich versuche, nie zu dieser Domain Annahmen / Einschränkungen lassen bekommen weit aus dem Takt. mit meinem Schema.

Hier ist der Kanon ich spreche:

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" )
//...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top