2012-04-28 3 views
22

Meteor로 데이터베이스 마이그레이션을 어떻게 수행합니까? Ruby on Rails에는 ActiveRecord :: Migration이 있습니다. Meteor에 동일한 메커니즘이 있습니까?Meteor 데이터베이스 마이그레이션을 수행하는 방법은 무엇입니까?

예를 들어 일부 사용자 데이터로 앱을 만듭니다. Mongo에 JSON 형식을 사용하여 데이터를 저장합니다. 앱이 변경되고 JSON 데이터베이스 스키마가 변경되어야합니다. 스키마를 변경하기위한 마이그레이션 방법을 작성할 수 있지만 서버 데이터베이스가 만료 된 경우에만 실행하는 것이 좋습니다.

답변

35

아무 것도 내장되어 있지 않습니다. 제가 지금까지 해 온 일은 Rails의 작동 방식과 비슷하지만 별도의 작업 대신 시작 과정의 일부로 수행됩니다. 먼저 Meteor.Collection이라는 마이그레이션을 만든 다음 각 개별 마이그레이션에 대해 시작시 실행되는 server 하위 디렉터리 아래에 함수를 만듭니다. 이전에 실행되지 않은 마이그레이션 만 실행해야하며 완료되면 마이그레이션 컬렉션의 마이그레이션을 플래그 지정해야합니다.

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

당신은, (주어진 마이그레이션의 존재를보고 그것을 역) 마이그레이션을 지원하는 마이그레이션에 정렬 순서를 적용하는이 기술을 확장하고, 당신이 원하는 경우 별도의 파일로 각각의 마이그레이션을 분할 할 수있다.

자동화를위한 스마트 패키지에 대해 생각해 보는 것은 흥미로운 일입니다.

+0

결국이 논리로 스마트 패키지를 만들 수있는 동기가 생길 수 있습니다. 이것은 여전히 ​​불분명 한 유성 (meteor) 방법보다 낫습니다. – wizonesolutions

+0

동일한 데이터베이스 (여러 웹 서버 또는 마이크로 서비스)에서 둘 이상의 서버를 실행하는 경우 5 개의 서버가 모두 동일한 쿼리를 실행하면 문제가 발생할 수 있습니다. 이 패키지는 [잠금 메커니즘] (https://github.com/percolatestudio/meteor-migrations/blob/master/migrations_server.js#L159)을 사용하는 것으로 보입니다 –

4

이 사용 사례를 위해 스마트 패키지를 만들었습니다.
https://atmosphere.meteor.com/package/migrations

+5

https://github.com/percolatestudio/meteor- 마이 그 레이션은 https://github.com/rantav/meteor-migrations보다 깨끗한 디자인을 갖고있는 것처럼 보입니다. –

5

아람이 이미 의견에 지적한대로 p ercolate:migrations 패키지는 필요한 것을 제공합니다. 샘플

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} 
}); 
관련 문제