Сценарий отъезда Grails для заполнения базы данных
-
30-09-2019 - |
Вопрос
Обновлять: Настоящее от 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" )
//...