2010-04-27 10 views
0

Je suis à mi-chemin de l'écriture de ma première application Grails. Cela se passe très bien jusqu'à présent, mais je viens juste de réaliser que lorsque je serai en ligne, je ne serai pas capable de changer autant le modèle de domaine.Grails - Mise à jour du domaine après la mise en ligne - Vais-je perdre mes données?

L'application est soutenue par une base de données MySql, je n'ai actuellement qu'un seul objet d'intérêt 'Personne'. Si, après le déploiement, je souhaite ajouter un domaine 'Groupe', de sorte qu'une personne ait plusieurs groupes, que devrai-je faire en ce qui concerne la base de données? Vais-je perdre des lignes existantes dans la base de données MySQL?

Comment les gens gèrent-ils généralement cette situation? Existe-t-il une manière intelligente de concevoir mes domaines ou un outil simple pour gérer l'ajout de colonnes dans la table 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;  
} 

Cordialement,

Gav

Répondre

3

Dans la production que vous voulez vous assurer que Grails ne modifie pas votre schéma de DB. La façon dont la plupart des gens gèrent cela consiste à modéliser vos mises à jour en développement, puis à créer des scripts de mise à jour SQL pour mettre à jour votre base de données de production et les appliquer juste avant le déploiement. L'outil Schema Export fourni avec des grails aide dans ce cas.

Il existe également des outils tels que le plugin DbMigrate pour vous aider à résoudre ces problèmes.

+0

C'est probablement la meilleure solution car il est assez effrayant de permettre à votre schéma d'être mis à jour "automatiquement par magie". –

+0

Avant le déploiement, je suis toujours en guerre pour voir que tout fonctionne bien. Et pendant ce temps, j'utilise l'application MySQL pour comparer la structure de la base de développement avec la base de données de production. Il génère un fichier SQL de migration, mais seules les bases de SQL sont nécessaires pour voir si vous allez perdre des données. –

1

Dans votre fichier DataSource.groovy, vous trouverez les configurations de vos bases de données. Si vous vérifiez que la propriété dbCreate dans la configuration de production est définie sur "mise à jour", cela devrait être correct et ne pas perdre de données. Voici un exemple de la configuration.

 production { 
      dataSource { 
        dbCreate = "update" 
        username = "user" 
        password = "pass" 
        url = "jdbc:mysql://dbmaster/databasename" 
      } 
     }