2010-04-27 2 views
0

Я на полпути, написав свое первое приложение grails. Пока все идет хорошо, но я только понял, что когда я пойду вживую, я не смогу так сильно изменить модель домена.Grails - Обновление домена после выхода в эфир - Я потеряю данные?

Приложение поддержано базой данных MySql, в настоящее время у меня есть только один объект интереса «Человек». Если после развертывания я хочу добавить домен «Group», чтобы у человека было много групп, что мне нужно делать в отношении базы данных? Смогу ли я потерять существующие строки в базе данных MySQL?

Как люди обычно справляются с этой ситуацией? Есть ли разумный способ разработки моих доменов или простой инструмент для управления добавлением столбцов в таблице MySql?

V1

class Person {  
    String firstName;  
    String lastName;  
    String email;  
    String phoneNumber;  
} 

V2

class Person { 
    static hasMany = [groups:Group] 
    String firstName;  
    String lastName;  
    String email;  
    String phoneNumber;  
} 

С наилучшими пожеланиями,

Гав

ответ

3

В производстве вы хотели бы, чтобы гарантировать, что Grails не изменяет вашу БД схемы. Способ, которым большинство людей справляется с этим, состоит в том, чтобы моделировать ваши обновления в разработке, а затем создавать сценарии обновления SQL для обновления вашей производственной базы данных и применять их непосредственно перед развертыванием. В этом случае помогает инструмент Schema Export, снабженный граалями.

Есть также такие инструменты, как плагин DbMigrate, чтобы помочь в решении этих проблем.

+0

Это, вероятно, лучшее решение, так как довольно страшно позволять обновлять вашу схему «автоматически-магически». –

+0

Перед развертыванием я всегда бегаю, чтобы все работало хорошо. И во время этого я использую приложение MySQL для сравнения структуры базы данных разработки с производственной базой данных. Он генерирует файл миграции SQL, но нужны только основы SQL, чтобы увидеть, потеряете ли вы какие-либо данные. –

1

В вашем файле DataSource.groovy вы найдете настройки для своих баз данных. Если вы подтвердите, что свойство dbCreate в производственной конфигурации настроено на «обновление», тогда вы должны быть в порядке и не потерять никаких данных. Вот пример конфигурации.

 production { 
      dataSource { 
        dbCreate = "update" 
        username = "user" 
        password = "pass" 
        url = "jdbc:mysql://dbmaster/databasename" 
      } 
     } 
Смежные вопросы