Meteor jak wykonać migracje baz danych?

Jak wykonać migrację bazy danych za pomocą Meteor? W Ruby on Rails jest ActiveRecord:: Migration. Czy istnieje równoważny mechanizm w Meteorze?

Na przykład, robię aplikację z danymi użytkownika. Przechowuję dane w Mongo używając formatu JSON. Aplikacja się zmienia, a schemat bazy danych JSON musi się zmienić. Mogę napisać metodę migracji, aby zmienić schemat, jednak chcę to uruchomić tylko wtedy, gdy baza danych serwera jest nieaktualna.

Author: Josh Petitt, 2012-04-28

3 answers

Nie ma do tego nic wbudowanego. To, co zrobiłem sam na razie, jest podobne do tego, jak działa Rails, ale jako część uruchamiania zamiast osobnego zadania. Najpierw Utwórz Meteor.Collection o nazwie Migracje, a następnie dla każdej dyskretnej migracji Utwórz funkcję w podkatalogu server, który działa przy starcie. Powinna ona uruchamiać migrację tylko wtedy, gdy nie była wcześniej uruchamiana, i powinna oznaczać migrację w kolekcji migracje po jej zakończeniu.

// 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"});
  }
});

Można rozszerzyć tę technikę na obsługa migracji w dół (poszukaj istnienia danej migracji i odwróć ją), wymuszaj kolejność sortowania na migracjach i podziel każdą migrację na osobny plik, jeśli chcesz.

Byłoby ciekawie pomyśleć o inteligentnym pakiecie do automatyzacji tego.
 35
Author: debergalis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-28 19:34:20

Jak zauważył Aram już w komentarzu, PPakiet ercolate: migrations daje Ci to, czego potrzebujesz. Próbka

Migrations.add({
    version: 1,
    name: 'Adds pants to some people in the db.',
    up: function() {//code to migrate up to version 1}
    down: function() {//code to migrate down to version 0}
});

Migrations.add({
    version: 2,
    name: 'Adds a hat to all people in the db who are wearing pants.',
    up: function() {//code to migrate up to version 2}
    down: function() {//code to migrate down to version 1}
});
 5
Author: Artiom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 08:12:25

Stworzyłem inteligentny pakiet dla tego przypadku użycia.
Zobacz https://atmosphere.meteor.com/package/migrations

 4
Author: Ran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-19 22:18:41