2015-09-30 7 views
2

Для моих тестов интеграции я загружаю базу данных «seed» в bootstrap.groovy. Я также вручную загружаю различные базы данных время от времени во время разработки, чтобы опробовать различные сценарии.Как запустить миграцию базы данных Grails после запуска

Проблема заключается в том, что плагин миграции базы данных (большое спасибо Берт!), Похоже, работает во время запуска, прежде чем попасть в код начальной загрузки, и я не вижу нигде, я могу запустить его снова.

Это означает, что если я загружаю db, который является «устаревшим», тогда я должен закрыть приложение и перезагрузить его, чтобы выполнить миграцию. Тогда я должен помнить, чтобы сделать снимок «новой» базы данных, поэтому мне не нужно делать это снова в следующий раз.

Все это действительно влияет на производительность, особенно при использовании нескольких рефакторингов.

Есть ли лучшие способы сделать это? В идеале я бы хотел использовать метод класса «runMigrations()» или что-то еще. Затем я мог бы назвать это после моих загрузочных инструментов или из моего кода начальной загрузки.

Любые идеи?

+0

Миграции не предназначены для запуска после запуска. Они предназначены для запуска перед запуском по причине необходимости правильной схемы перед запуском приложения. Для этого вам понадобится другой инструмент. –

ответ

1

Возможно, и это допустимый прецедент, на мой взгляд, например. для запуска конкретных контекстов после запуска приложения:

import grails.plugin.databasemigration.MigrationUtils 
import liquibase.Liquibase 

class DatabaseMigrationService { 

    def runMigrationsForContexts(String contexts) { 
    def database = MigrationUtils.getDatabase() 
    Liquibase liquibase = MigrationUtils.getLiquibase(database) 
    liquibase.update(contexts) 
    } 
} 
+0

Отлично! Это сработало! Большое спасибо! –

0

Пол,

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

Извините!

+1

Пробыв сеть в течение нескольких дней, я прихожу к такому же выводу, но я не могу не чувствовать, что, поскольку Liquibase - это отдельное приложение, которое плагин dbmigration «просто» вызывает, тогда его можно будет вызвать в будет, так сказать. Думаю, нам нужен вход Берта здесь ... –

Смежные вопросы