SimpleSchema と Collection2 を使用しています。
アプリの新しいバージョンをプッシュする前に、新しいスキーマで無効になるドキュメントがあるかどうかを確認したいと思います。これを行う自動化された方法はありますか?
またはコマンドラインユーティリティ?
スキーマが変更された新しいバージョンをどのようにリリースしますか?
ありがとう!
マイク
SimpleSchema と Collection2 を使用しています。
アプリの新しいバージョンをプッシュする前に、新しいスキーマで無効になるドキュメントがあるかどうかを確認したいと思います。これを行う自動化された方法はありますか?
またはコマンドラインユーティリティ?
スキーマが変更された新しいバージョンをどのようにリリースしますか?
ありがとう!
マイク
@michel のアドバイスに従い、コレクションをチェックするためにこのサーバー側のルートを作成しました。
これは、データをクリーニングして保存しているため、かなり危険です。つまり、フィールドを消去しています。おそらく、これらのフィールドが必要ないため、スキーマからそれらを削除しましたが、バグである可能性もあります。だから、エンプターカウボーイに注意してください。明らかに、これは運用サーバー上にあってはなりません。
次のような URL を使用して確認できます。
http://127.0.0.1:4000/v/users
応答:
{
"ok": 1
}
ルート:
skipUpdatedAt = true;
Router.route('validate', {
path: '/v/:collection',
where: 'server',
action: function() {
var res = this.response;
var collections = {
users: Meteor.users,
puppies: Puppies,
unicorns: Unicorns,
rainbows: Rainbows,
};
var c = collections[this.params.collection];
if (!c) {
res.statusCode = 404;
return res.end('not found');
}
var s = c.simpleSchema();
var ret = { ok: 0 };
c.find().forEach(function(doc){
var id = doc._id;
try {
s.clean(doc);
check(doc,s);
c.update(id, doc, {validate: false});
ret.ok += 1;
} catch (e) {
ret[id] = {
doc: doc,
error: e.toString(),
};
console.log('=============ERROR');
console.log(doc);
console.log('-------------');
console.log(e);
}
});
res.statusCode = 200;
if (Object.keys(ret).length) res.statusCode = 500;
res.end(JSON.stringify(ret, null, 2));
}
});