Non c'è niente di integrato in questo. Quello che ho fatto io per ora è simile a come funziona Rails, ma come parte dell'avvio invece di un'attività separata. Creare innanzitutto un numero Meteor.Collection
denominato Migrazioni, quindi, per ciascuna migrazione discreta, creare una funzione nella sottodirectory server
che viene eseguita all'avvio. Dovrebbe eseguire la migrazione solo se non è mai stata eseguita prima e dovrebbe segnalare la migrazione nella raccolta Migrations una volta eseguita.
// database migrations
Migrations = new Meteor.Collection('migrations');
Meteor.startup(function() {
if (!Migrations.findOne({name: "addFullName"})) {
Users.find().forEach(function (user) {
Users.update(user._id, {$set: {fullname: users.firstname + ' ' + users.lastname}});
});
Migrations.insert({name: "addFullName"});
}
});
Si potrebbe estendere questa tecnica per sostenere le migrazioni (cercare l'esistenza di un dato migrazione e invertire tale tendenza), applicare un criterio di ordinamento sulle migrazioni, e dividere ogni migrazione in un file separato se si voleva.
Sarebbe interessante pensare a un pacchetto intelligente per l'automazione di questo.
Alla fine potrei ottenere la motivazione per creare un pacchetto intelligente con questa logica. Questo è ancora meglio di un oscuro metodo Meteor. – wizonesolutions
Se si dispone di più server in esecuzione sullo stesso database (più server Web o micro-servizi), è possibile che si verifichino problemi quando 5 server eseguono la stessa query. Questo pacchetto sembra utilizzare un [meccanismo di blocco] (https://github.com/percolatestudio/meteor-migrations/blob/master/migrations_server.js#L159) –