2016-04-05 20 views
2

Ich habe ein Plugin von verschiedenen Projekten verwendet und ich fand heraus, dass ich eine Änderung in einer Domain-Klasse vornehmen muss. Wie stelle ich sicher, dass das Schema in den Projekten, die von meinem Plugin abhängen, ordnungsgemäß aktualisiert wird?Grails: Wie führe ich Änderungen an einer Plugins-Domain-Klasse durch, wenn sich die Änderung auf das Schema der Domain-Tabelle auswirkt?

Update:

Ich ändere maxSize Einschränkung eines String Feld von 255 bis 8000.

+1

Setzen Sie Ihre Projekte DataSource 'dbCreate' auf' update' oder verwenden Sie Datenbankmigrationen. –

+2

Wenn die anderen Projekte bereits Daten in der Domänenklasse abgelegt haben, müssen Sie ein Migrationsskript schreiben. :-(ppl hate mig scripts. :-) – dsharew

+0

Das hängt davon ab, was Sie im Domain-Objekt ändern. Wenn Sie z. B. ein neues Attribut hinzufügen, das nicht "nullalbe" ist, hilft die Einstellung von DataSource auf "update" nicht. Was ändern Sie im Domain-Objekt? – Armaiti

Antwort

3

Wie kann ich sicherstellen, dass das Schema richtig in den Projekten aktualisiert hängen von meiner Plugin?

Sie können wirklich nicht, zumindest nicht in einer Weise, die allgemein anwendbar ist. Im Allgemeinen sollte ein Plugin nicht davon ausgehen, dass die Anwendung ein Schema generiert oder ändert. Sie sollten die Änderung als Teil der Upgrade-Hinweise Ihres Plugins dokumentieren.

+0

Ok Jeff, es ist ein wenig schwierig zu erwarten, dass Plugin-Benutzer tatsächlich Migrationsskripts erstellen und ausführen. –

+1

"es ist ein wenig schwierig zu erwarten, dass Plugin-Benutzer tatsächlich Migrationsscripts erstellen und ausführen" - Die meisten Entwickler haben ihre Anwendung sowieso nicht so konfiguriert, dass sie DDL generiert. Auf die eine oder andere Weise muss die Datenbank mit den Erwartungen der Anwendung synchron gehalten werden. Sie haben keine andere Wahl als die Benutzer zu informieren. Wenn Sie sagen, dass Ihr Plugin nur von Personen verwendet werden kann, die das Migrations-Plugin verwenden, schränken Sie Ihre Zielgruppe ein. –