2016-04-05 2 views
2

J'ai un plugin utilisé par différents projets et j'ai découvert que je devais faire un changement dans une classe de domaine. Comment puis-je m'assurer que le schéma est correctement mis à jour dans les projets qui dépendent de mon plugin?Grails: comment modifier une classe de domaine plugins si la modification affecte le schéma de la table du domaine?

Mise à jour:

Je change maxSize contrainte d'un champ String de 255 à 8000.

+1

Définissez vos projets DataSource 'dbCreate' à' update' ou utilisez des migrations de base de données. –

+2

Si les autres projets ont déjà mis des données sur la classe de domaine, vous devez écrire un script de migration. :-(ppl hate mig scripts. :-) – dsharew

+0

Tout dépend de ce que vous modifiez dans l'objet domaine. Par exemple, si vous ajoutez un nouvel attribut qui n'est pas 'nullalbe', définir DataSource sur' update' ne vous aidera pas. Qu'est-ce que vous changez dans l'objet de domaine? – Armaiti

Répondre

3

Comment puis-je faire en sorte que le schéma est correctement mis à jour dans les projets qui dépendent de mon brancher?

Vous ne pouvez vraiment pas, du moins pas d'une manière qui est généralement applicable. En général, un plugin ne doit pas supposer que l'application génère ou modifie un schéma. Vous devez documenter la modification dans le cadre des notes de mise à niveau de votre plug-in.

+0

Ok Jeff, il est un peu difficile de s'attendre à ce que les utilisateurs de plugins créent et exécutent des scripts de migration. –

+1

"il est un peu difficile de s'attendre à ce que les utilisateurs de plugins créent et exécutent des scripts de migration" - La plupart des développeurs n'ont pas leur application configurée pour générer du DDL de toute façon. D'une manière ou d'une autre, la base de données doit être synchronisée avec les attentes de l'application. Vous n'avez pas vraiment le choix d'informer les utilisateurs. Si vous dites que votre plugin n'est utilisable que par des personnes utilisant le plugin migrations, vous limitez votre audience. –