Question

Mise à jour: au Grails 1.3.6 a un accès au domaine complet de scripts Gant. Des Grails 1.3.6 notes de version :

Vous pouvez maintenant exécuter un ou plusieurs scripts Groovy de la ligne de commande en utilisant la commande d'exécution de script, par exemple.

grails exécuter script [à chemin-script-n] [path-to-script-1] [path-to-script-2] ...

Cela fonctionne autour de la question dans les scripts où vous pouvez Gant non classes d'application pratique d'accès car ils ne sont pas disponibles dans le classpath lorsque les scripts commencent.


Salut à tous,

Je suis nouveau à l'utilisation Grails (dans un vrai projet) et j'ai un unique script que je besoin d'exécuter un fichier qui lit et renseigne ensuite ma base de données.

Je voulais que le script à exécuter dans le cadre de mon application de Grails, donc je la commande create-script. Je comprends maintenant qui en fait un script « Gant ». La raison de le faire était que je pensais que ça me permettrait d'accéder facilement à tous les domaines de Grails bien-ness, de sorte que je serais capable de faire quelque chose comme ceci facilement:

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

Ici, voiture est l'une de mes classes de domaine et les chaînes de bar 'et « Ford » je récupéré de mon dossier.

Le début de mon apparence de script comme ceci:

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

Étonnamment, groovy me donne un java.lang.NoClassDefFoundError: com.foo.Car quand j'exécute le script avec la commande grails LoadCars

Suis-je fait fausse route, ou est-il quelque chose de plus simple que je fais mal?

Toute aide est appréciée

Était-ce utile?

La solution

Je l'ai mis à jour le Grails exécuter script de script Gant (appelé par Jared ci-dessus) pour travailler avec Grails 1.3.5. J'avais eu l'intention de le faire pendant un certain temps, mais cette question m'a poussé à enfin se déplacer à elle).

Il suffit de télécharger le script décrit dans le message, enregistrez-le dans votre répertoire Grails « scripts » et vous pouvez ensuite exécuter votre propre script groovy aux données bootstrap avec:

grails run-script script-path/boostrapMyDataIntoApp.groovy

Autres conseils

Je sais que les scripts sont utiles, et je vais probablement obtenir la haine mail pour même suggérer, mais je viens d'intégrer ce peu de choses directement dans mon application dans le passé.

J'ai un ensemble de drapeau dans ma configuration qui indique si les données doivent être amorcés, le cas échéant, les regards de code d'amorçage pour un fichier délimité par des virgules au démarrage et appelle une méthode de service pour charger les données.

J'ai dû le faire et vous devez créer un script spécial pour vous permettre de Gorm d'accès à partir d'un script standard de Grails. Voir cette question pour plus d'informations. Je ne suis pas sûr de ce que l'état actuel du script est sous Grails 1.3, mais l'auteur du script affiché dans les commentaires.

Hans, il y a plusieurs choix ici, vous n'êtes pas en supposant pour polir les côtelettes scripting GANT 8 ^)

Alors supposons que vous faites un certain mode d'intégration TDD, correct? Avez-vous regardé dans le plug-in db-stuff? En fait, que l'on tire parti du paquet open source (extension du projet JUnit) appelé DbUnit, qui est aussi un excellent choix, tant pour les projets Java et Groovy.

* db-stuff <0.3.0> - db schéma managment et import / export de données. Générer des fichiers de schéma génériques et d'importation ou d'exportation de base / données graines / test dans votre base de données.


J'ai toujours fait cela aussi bien dans le BootStrap en fonction de l'environnement - et j'essaie de ne jamais laisser les hypothèses de domaine / contraintes deviennent trop loin désynchronisé. avec mon schéma.

Voici le canon dont je parle:

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" )
//...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top