我希望我的应用程序的管理代码托管在一个完全不同的应用程序上,该应用程序共享同一个数据库。但是,这意味着我的集合至少在代码中定义在我的主应用程序的全局命名空间中,而不是我的管理应用程序。如何在不在流星服务器/客户端之间共享的文件中定义全局变量的情况下访问数据库中的集合?作为参考,我使用这篇文章作为以这种方式设置我的管理工具的想法。 admin article
答案 0 :(得分:2)
为了简化问题,我们假设你有:
A
和B
Posts
MONGO_URL
这个解决方案并不复杂 - 只需将集合定义从一个应用程序复制到下一个应用程序:
<强> A / LIB / collections.js 强>
Posts = new Mongo.Collection('posts');
<强> B / LIB / collections.js 强>
Posts = new Mongo.Collection('posts');
这适用于您只需要集合名称的情况。
为您的Posts
集合创建共享local package。在每个应用中:meteor add posts
。
这有点复杂,因为您需要创建一个pacakge,但对于您的集合中有model或其他需要在其间共享的额外代码的情况,情况会更好申请。此外,您将获得创建包的好处,例如测试依赖关系管理等。
答案 1 :(得分:0)
每个应用程序都有自己的代码,但会共享同一个mongo db。您需要为管理应用程序定义相同的集合(或子集甚至超集)。您可以在两个应用程序之间rsync某些目录,如果这样做了那个过程,但Meteor中没有任何东西可以为你做这件事。
答案 2 :(得分:0)
或者您可以使用DDP在两台服务器之间共享数据:
var conn = DDP.connect('http://admin-server');
Tracker.autorun(function() {
var status = conn.status();
if(status.connection) {
var messages = new Mongo.Collection('messages', {connection: conn});
conn.subscribe('messages', function() { console.log('I haz messages'); });
}
});
这将创建一个名为messages
的本地集合,该集合通过DDP从“管理服务器”提取数据。此集合仅存在于内存中 - 在mongo中不会创建任何内容。您可以在服务器或客户端上执行此操作。绝对不是大型数据集的最佳选择。限制数据传输与出版物。