Как вы, наверное, знаете, директива dbcreate
не рекомендуется для рабочей среды. использовать:
Вы также можете полностью удалить параметр dbCreate
, что рекомендуется делать, когда ваша схема относительно стабильна и, безусловно, когда ваше приложение и база данных развернуты в рабочей среде.
Так что имейте в виду, что вам нужно будет удалить это (или установить 'none'
).
Начальный базовый рабочий процесс
- Определить текущее состояние
- Создать базу данных из журнала изменений или отметить как актуальную
- Установить параметры конфигурации
Первый шаг — заставить changelog
отражать текущее состояние. Если у вас есть существующая база данных, вы хотите использовать ее для определения базовой линии. В противном случае используйте GORM для определения таблиц.
Эти команды создадут базовый уровень для вашей базы данных. Также я выбираю формат Groovy DSL, а не Liquibase XML, потому что удобочитаемость.
Существующая база данных
Если у вас уже есть рабочая база данных с данными, это немного сложно. Вам потребуется доступ к базе данных или ее копии из среды Grails. Если вы манипулируете копией, вам нужно будет применить обновления обратно к вашей рабочей среде (и, возможно, управлять ею как запланированным отключением).
Команда:
grails [environment] dbm-generate-changelog changelog.groovy
... где environment
необязательно указывает среду dev/test/prod/custom, в которой определена база данных.
После этого пометьте базу данных как «актуальную» в отношении журнала изменений:
grails [environment] dbm-changelog-sync
Затем повторно примените базу данных к рабочей среде, если это необходимо.
Новая база данных
Если у вас нет существующей базы данных (или вам все равно):
grails dbm-generate-gorm-changelog changelog.groovy
Затем, чтобы создать базу данных из журнала изменений:
grails [environment] dbm-update
Конфигурация
Вы уже правильно установили параметры:
grails.plugin.databasemigration.updateOnStart = true
grails.plugin.databasemigration.updateOnStartFileNames = ['changelog.groovy']
Эти параметры просто означают, что плагин попытается применить изменения к базе данных при запуске приложения.
Рабочий процесс разработки
- Внесите изменения в домены
- Создать журнал изменений, выявляющий различия
- (Резервное копирование и) обновление базы данных
Итак, теперь у вас есть актуальная база данных, и вы вносите изменения в классы предметной области, добавляя новые и изменяя свойства проверки.
Каждый раз, когда вы хотите записать свои изменения, вы хотите сравнить свои классы GORM с тем, что существует в базе данных, и создать новый файл журнала изменений, чтобы записать разницу:
grails [environment] dbm-gorm-diff [meaningful name].groovy --add
Здесь environment
— это база данных, с которой вы сравниваете, а meaningful name
должно каким-то образом отражать применяемое изменение (возможно, ключ задачи JIRA, номер версии или описание).
Флаг --add
вставит оператор include
в changelog.groovy
.
Если вы настроили updateOnStart
, то все готово! В противном случае, чтобы вручную обработать обновление, повторно используйте команду:
grails [environment] dbm-update
РТФМ
- Документация по плагинам — Начало работы
- Документация по подключаемым модулям — Общее использование
- Ответ Confile выше указывает на хороший учебник, в котором подробно рассказывается о ручных изменениях в журналы изменений
- Документация Liquibase — наборы изменений (использует формат XML, но полезен для понимания концепций)
person
brasskazoo
schedule
03.12.2014