Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le migration

Aggiornare l'applicazione e "migrare" tra le versioni del database
Aggiornare l'applicazione e "migrare" tra le versioni del database
Link copiato negli appunti

Active Record mette a disposizione un meccanismo specifico per la creazione e l'evoluzione dello schema del database. Se guardiamo il contenuto della cartella db/migrate della nostra applicazione di esempio, vedremo due file:

20080602001649_create_bookmarks.rb
20080602145658_acts_as_taggable_migration.rb

Questi due file sono stati generati rispettivamente dallo scaffold utilizzato per gestione dei bookmark e dal plugin installato per aggiungere la funzionalità di tagging; il primo si è occupato di preparare la tabella per le gestione dei boomark, mentre il secondo delle tabelle per il tagging.

Se osserviamo il nome dei due file vediamo come il nome significativo dei file (create_bookmarks per la creazione dei bookmark e acts_as_taggable_migration per il tagging) sia preceduto da data e ora di creazione dei file. Questo semplice meccanismo consente di mantenere i file di migrazione sempre ordinati e quindi di ricostruire la "storia" dello schema del database. Nel nostro caso in un primo momento l'applicazione aveva bisogno solo della tabella per i bookmark, e in seguito di altre tabelle per il tagging.

Un'applicazione non è qualcosa di statico ma evolve durante il periodo del suo sviluppo; all'evolversi dell'applicazione evolvono i modelli che interagiscono con il database e lo schema del database. Il sistema di migrazione di Ruby on Rails è studiato per assecondare queste caratteristiche e rendere lo sviluppo di un'applicazione il più fluido possibile.

Per tenere traccia della versione del database, Rails utilizza una tabella dedicata chiamata schema_migrations che elenca tutte le migrazioni che sono state effettuate; nel nostro caso riporterà:

SELECT * FROM schema_migrations;
20080602001649
20080602145658

Il sistema di migrazione permette di ritornare indietro nel tempo nella struttura dello schema del database; dalla versione 2 possiamo ritornare alla versione 1 e così via. Questa funzionalità torna particolarmente utile quando il codice è gestito da un SCM come Git, SVN o CVS. Poniamo il caso di avere il codice alla versione 3 e il database alla versione 2; se volessimo ritornare alla versione 1 del codice, avremmo la possibilità di trasformare lo schema del database in modo che sia allineato alla versione del codice.

Figura 5. Versioning
Versioning

I file di migrazione presenti nella cartella db/mgirate contengono in testa al nome data e ora della loro creazione in forma di timestamp:

20080602001649_create_bookmarks.rb
20080602145658_acts_as_taggable_migration.rb

Il timestamp identifica non solo il singolo file di migrazione ma anche la versione del database che stiamo utilizzando; se al database è stato applicato solo il primo file, la versione del database sarà 20080602001649, se è stato applicato anche il secondo sarà 20080602145658. Dal terminale utilizziamo il comando rake db:version per conoscere la versione del database che stiamo utilizzando:

$rake db:version
Current version: 20080608125754

Il database è aggiornato all'ultima versione disponibile. Per tornare alla versione 20080602001649, la versione in cui era presente solo la tabella per i bookmark, è sufficiente utilizzare dal terminale l'istruzione:

rake db:migrate VERSION=20080602001649

Indicando 20080608125754 come versione del database desiderata, torneremo ad avere tutte le migrazioni applicate. Se vogliamo azzerare lo schema del database, è sufficiente introdurre come versione desiderata 0. Se non viene indicata alcuna versione, e viene quindi inserito il comando rake db:migrate, il database verrà aggiornato all'ultima versione disponibile.

Ti consigliamo anche