Для этого ничего не создано. То, что я сделал сейчас, похоже на то, как работает Rails, но как часть запуска вместо отдельной задачи. Сначала создайте Meteor.Collection
с именем Migrations, а затем для каждой дискретной миграции создайте функцию под подкаталогом server
, которая запускается при запуске. Он должен выполнить только миграцию, если она еще не выполнялась раньше, и она должна отмечать миграцию в коллекции Migrations после ее завершения.
// 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"});
}
});
Вы можете расширить эту технику, чтобы поддержать вниз миграции (обратите внимание на существование данной миграции и повернуть его вспять), соблюдение порядка сортировки по миграции, и разделить каждую миграцию в отдельный файл, если вы хотите.
Было бы интересно подумать о смарт-пакете для автоматизации этого.
В конце концов, я мог бы получить мотивацию сделать интеллектуальный пакет с этой логикой. Это все еще лучше, чем неясный метод Метеор. – wizonesolutions
Если у вас несколько серверов, работающих в одной базе данных (несколько веб-серверов или микросервисов), вы можете столкнуться с проблемами, когда 5 серверов выполняют один и тот же запрос. Этот пакет, похоже, использует механизм блокировки (https://github.com/percolatestudio/meteor-migrations/blob/master/migrations_server.js#L159) –