Сценарий отъезда Grails для заполнения базы данных

StackOverflow https://stackoverflow.com/questions/4348803

Вопрос

Обновлять: Настоящее от Grails 1.3.6 у одного есть доступ к полной домене из сценариев Гэнта. От грамлей 1.3.6 Ноты выпуска:

Теперь вы можете запустить одну или несколько сценариев Groovy из командной линии с помощью команды Run-Script, например,

Grails Run-Script [Путь к сценарию - 1] [Путь к скрипту-2] ... [Путь к скрипту - N

Это работает по вопросу о проблеме в сценариях GANT, где вы не можете удобно получать доступ к урокам приложений, поскольку они недоступны в классе, когда начнутся сценарии.


Всем привет,

Я новичок, чтобы использовать Grails (в реальном проекте), и у меня есть одноквартирный скрипт, который мне нужно выполнить, что читает файл, а затем заполняет мою базу данных.

Я хотел, чтобы скрипт запустился в контексте моего приложения Grails, поэтому я использовал команду Create-Script. Теперь я понимаю, что делает его сценарием «Гэнт». Причина для этого была то, что я подумал, что это позволит мне легкий доступ ко всем домену Grails Good-Ness, чтобы я мог сделать что-то так легко:

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

Здесь автомобиль является одним из моих доменных классов и строки «бар» и «Ford», который я получил из моего файла.

Начало моего сценария выглядит так:

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

Удивительно, что Groovy дает мне java.lang.NoClassDefFoundError: com.foo.Car Когда я выполняю скрипт с помощью команды grails LoadCars

Я принимаю неправильный подход, или есть что-то проще, я делаю не так?

Любая помощь ценится

Это было полезно?

Решение

Я обновил Grails Run-Script Gant Script (упоминается Джаред выше) для работы с Grails 1.3.5. Я имел в виду, чтобы сделать это на некоторое время, но этот вопрос поднял меня, наконец, опережая к нему).

Просто скачайте скрипт, описанный в посте, сохраните его в каталоге «Сценарии Grails», и вы можете запустить свой собственный сценарий Groovy для данных Bootstrap с:

grails run-script script-path/boostrapMyDataIntoApp.groovy

Другие советы

Я знаю, что сценарии полезны, и я, вероятно, получим почту ненависти, чтобы даже предложить ее, но я только что включил эту рода материал непосредственно в мое приложение в прошлом.

У меня есть флаг, установленный в моей конфигурации, что указывает, должны ли данные должны быть загружены, если это так, код Bootstraps ищет файл разделите запятую при запуске и вызывает метод обслуживания для загрузки данных.

Я должен был сделать это, и вы должны создать специальный скрипт, чтобы позволить вам получить доступ к GROM из стандартных решеток Grails. Видеть этот вопрос для получения дополнительной информации. Я не уверен, какой текущий статус сценария находится под границами 1.3, но автор сценария разместился в комментариях.

Ганс, здесь есть несколько вариантов, предполагая, что вы не собираетесь польскими сценариями Gant Chops 8 ^)

Так предположим, что вы делаете свой интеграционный режим TDD, правильно? Вы смотрели в плагин DB-вещей? На самом деле, что каждый использует пакет с открытым исходным кодом (расширение проекта JUnit) под названием DBUNIT, который также является выдающимся выбором для Java, так и для проектов Groovy.

*DB-материалы <0.3.0> - БД схемы управления и импорт / экспорт данных. Создайте общие файлы схемы и импортировать или экспортировать базовые / семена / тестовые данные в вашу базу данных.


Я традиционно делал это, а также в Bootstrap в зависимости от окружающей среды - и я пытаюсь никогда не позволить этим допущениям / ограничениям / ограничениям получить слишком далеко от синхронизации. с моей схем.

Вот канон я говорю о:

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" )
//...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top