我试图让Meteor Admin显示SyncedCron的条目。 Meteor Admin要求您attachSchema才能注册收藏集。我已经用自己的简单收藏做到了这一点,例如基本的事件集合,但无法确定如何在管理员中看到SyncedCron作业:
SyncedCron在我的应用程序中运行良好。文档说“ uses a collection called cronHistory to syncronize between processes”。如果我运行:
> SyncedCron._entries
{ name: 'LExXMbhKE7bJF5nay notification 2',
schedule: [Function],
job: [Function],
_timer: { clear: [Function] } },
'LExXMbhKE7bJF5nay notification 3':
{ name: 'LExXMbhKE7bJF5nay notification 3',
schedule: [Function],
job: [Function],
_timer: { clear: [Function] } } }
我检查cronHistory是否存在:
Mongo.Collection.getAll();
{ name: 'cronHistory',
instance:
{ _makeNewID: [Function],
_transform: null,
_connection: [Object],
_collection: [Object],
_name: 'cronHistory',
_driver: [Object],
_restricted: false,
_insecure: undefined,
_validators: [Object],
_prefix: '/cronHistory/',
before: [Object],
_hookAspects: [Object],
after: [Object],
hookOptions: [Object],
direct: [Object] },
options: undefined }
所以我尝试在为Meteor Admin注册之前附加一个架构:
cronHistory.attachSchema(new SimpleSchema({
name: {
type: String,
label: "Name"
}
}));
并得到错误:
ReferenceError: cronHistory is not defined
有任何想法吗?
最佳答案
我相信SyncedCron
会写入cronHistory
集合,但不会导出集合句柄。根据this,应该可以通过SyncedCron._collection
访问该集合。
鉴于此,您应该能够:
Meteor.startup(function () {
var root = Meteor.isClient ? window : global;
root.CronHistory = SyncedCron._collection;
root.CronHistory.attachSchema(...);
});
更新的答案
根据下面的对话,这只是一个非常困难的问题。您有两个程序包,您的应用程序都定义和使用了集合,并且顺序必须精确才能使所有工作正常进行。这就是我要做的:
定义
CronHistory
集合,就像在应用程序中打包其他任何东西一样,并像平常一样附加架构。将
CronHistory
与应用程序中的其他集合一起添加到您的AdminConfig
中。使用
SyncedCron
的local version并对其进行修改以查找全局定义的CronHistory
集合。有关某些提示,请参见this post。请注意,您需要删除new Mongo.Collection(options.collectionName);
行。