Migrazioni¶
Le migrazioni sono come un sistema di controllo versione per il tuo database. Ogni migrazione definisce un cambiamento al database e come disfarlo. Utilizzando le migrazioni per applicare modifiche al database, stabilisci un approccio coeso, testabile, e condivisibile per evolvere nel tempo i tuoi database.
// Un esempio di migrazione.
struct MyMigration: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
// Fai una modifica al database.
}
func revert(on database: Database) -> EventLoopFuture<Void> {
// Disfai le modifiche fatte in `prepare`, se possibile.
}
}
Se usi async
/await
devi implementare il protocollo AsyncMigration
:
struct MyMigration: AsyncMigration {
func prepare(on database: Database) async throws {
// Fai una modifica al database.
}
func revert(on database: Database) async throws {
// Disfai le modifiche fatte in `prepare`, se possibile.
}
}
Il metodo prepare
è dove fai le modifiche al Database
fornito. Potrebbero essere modifiche allo schema del database come aggiungere o rimuovere una relazione o una collezione, attributo, o vincolo. Possono anche modificare il contenuto del database, come creare nuove istanze del modello, aggiornare valori di un attributo, o fare pulizia.
Il metodo revert
è dove disfai queste modifiche, se possibile. Essere in grado di disfare le migrazioni può rendere la prototipazione e il testing più facili. Forniscono anche un piano di backup se un deploy in produzione non va come pianificato.
Registra¶
Le migrazioni vengono registrate alla tua applicazione usando app.migrations
.
import Fluent
import Vapor
app.migrations.add(MyMigration())
Puoi aggiungere una migrazione a un database specifico usando il parametro to
, altrimenti sarà utilizzato il database di default.
app.migrations.add(MyMigration(), to: .myDatabase)
Le migrazioni dovrebbero essere listate in ordine di dipendenza. Per esempio, se MigrationB
dipende da MigrationA
, deve essere aggiunto a app.migrations
per secondo.
Migra¶
Per migrare il tuo database, esegui il comando migrate
.
swift run App migrate
Puoi anche eseguire questo comando attraverso Xcode. Il comando di migrazione controllerà il database per vedere se sono state registrate nuove migrazioni dall'ultima volta in cui è stato eseguito. Se ci sono nuove migrazioni, chiederà una conferma prima di eseguirle.
Ripristinare¶
Per disfare una migrazione sul tuo database, esegui migrate
con la flag --revert
.
swift run App migrate --revert
Il comando controllerà il database per vedere quale gruppo di migrazioni è stato eseguito per ultimo e chiederà conferma prima di ripristinarle.
Migra Automaticamente¶
Se vuoi che le migrazioni vengano eseguite automaticamente prima degli altri comandi, puoi passare la flag --auto-migrate
.
swift run App serve --auto-migrate
Puoi farlo anche programmaticamente.
try app.autoMigrate().wait()
// oppure
try await app.autoMigrate()
Entrambe queste opzioni esistono anche per ripristinare: --auto-revert
e app.autoRevert()
.
Prossimi Passi¶
Per avere più informazioni riguardo a cosa mettere dentro le tue migrazioni, consulta le guide per costruire gli schemi e per costruire le query.