如何在本地机器上的 2 个流星应用程序之间可靠地共享 mongo 数据库?

Posted

技术标签:

【中文标题】如何在本地机器上的 2 个流星应用程序之间可靠地共享 mongo 数据库?【英文标题】:How to reliably share a mongo database between 2 meteor applications on local machine? 【发布时间】:2016-01-18 04:03:19 【问题描述】:

我一直在努力可靠地在本地计算机上的 2 个不同的流星应用程序(管理员和客户端)之间共享数据库。我有时可以让它工作,但有时它不会连接一整天,尽管我做了所有尝试和重置数据库、重新启动机器、清除缓存等。

我的问题是,为了使这项工作可靠地进行,具体的步骤是什么?

以下是过去某些时候对我有用的方法:

为我的流星客户端应用程序打开我的 Webstorm IDE,并在终端中为我运行的项目打开:meteor run。建立连接后,我按 ctrl+c 终止连接并切换到流星管理应用程序,然后运行:MONGO_URL="mongodb://127.0.0.1:3001/meteor" meteor

这已经工作了好几次,两个应用程序共享同一个 mongo 数据库。然而,这对我来说并不可靠,因为在关闭或关闭 Webstorm 后,有时我无法让它们正确连接并共享同一个数据库。我原本以为我只需要重新启动和/或关闭 webstorm 的终端会话,但这也不可靠。任何帮助将不胜感激。

更新 我还尝试打开两个单独的终端会话并执行以下操作无济于事:

终端 1- 客户端:meteor(这会按预期运行客户端应用程序) 终端 1- 客户端:ctrl+c 杀死正在运行的应用程序

终端 2- admin: MONGO_URL="mongodb://127.0.0.1:3001/meteor" meteor (无法连接到以前的客户端数据库,无法运行管理应用程序并给出此错误:W20151019-13: 30:40.334(-5)? (STDERR) 错误:无法连接到 [127.0.0.1:3001] )

【问题讨论】:

您为什么要使用 IDE 而不是自己启动 MongoDB 实例? 我只是使用 Webstorms IDE 和终端,因为它很方便,但我只是在两个终端会话中尝试了相同的步骤,但没有运气。 您能否请edit 了解您在两个终端中所做的事情以及它是如何失败的? 【参考方案1】:

如果这些是真正的“本地”数据库,那么您不应该期望能够相互访问它们。

本地 MongoDB [数据库] 是在“isClient”代码块或 /client 文件夹层次结构中创建的,使用无名称或 null 来定义它,如下所示:

PlatypusCollection = new Mongo.Collection(null);

OTOH,如果你给集合起个名字,像这样:

PlatypusCollection = new Mongo.Collection('platypus');

...(并将此代码放在“isClient”块或“client”文件夹或其子文件夹之外的其他位置),它将是一个服务器端集合,可以由服务器发布并订阅客户。默认情况下(通过 autopublish 和 insecure 包),所有人都可以使用所有服务器端集合。

更新

如果您的意思是要让同一个 Meteor 应用程序的两个实例同时运行,您需要让其中一个在 3000 以外的端口上运行。在命令行中,您需要执行类似的操作这个:

meteor --port 3042

这可能会有所不同,具体取决于您正在开发的操作系统(提示管理 *** Meteor 相关标签的 Meteor-monitors/masters:拥有 meteor-windows、meteor-linux、meteor- 可能是值得的ios 标签,或类似的东西)。

默认情况下,您的 Meteor 应用程序的第一个实例将在 localhost:3000 上运行,但在那个“城镇”中没有足够的空间让两个应用程序同时运行,因此必须“退出 Dodge”。

然后(在确保两者都在各自的端口上运行之后),两个 Meteor 应用程序实例应该都能够访问同一个 MongoDB 数据库(前提是它不是真正的 本地 (Minimongo) 数据库,如上所述)。

类似于 Meteor 应用程序的第一个实例默认在端口 3000 上运行,相关的 MongoDB 实例默认在端口 3001 上运行,所以不要给第二个应用程序实例提供该端口号(除非你明确地给了 MongoDB与默认端口号不同)。

【讨论】:

为了阐明我想要做什么,我希望 2 个应用程序在我的本地计算机上共享同一个数据库。如果我在一个应用程序中创建用户“Bob Thompson”,那么当我登录到另一个应用程序时,我希望能够看到“Bob Thompson”。我过去曾使用 MONGO_URL="mongodb://127.0.0.1:3001/meteor" 完成此操作,但它并不可靠,因此我必须缺少有关如何正确连接我的 2 个应用程序的基础知识。 如果你的意思是你想让同一个 Meteor 应用程序的两个实例同时运行,你需要让其中一个在 3000 以外的端口上运行。我会更新我的答案。跨度> 谢谢克莱!我使用的是 Mac,在我的第一个应用程序上运行了流星 --port 3005。据我所知,这在端口 3006 上运行 mongodb。所以,然后在我的第二个应用程序上运行 MONGO_URL="mongodb://127.0.0.1: 3006/meteor”流星,一切正常。请注意,您也可以运行 MONGO_URL="mongodb://localhost:3006/meteor" meteor 并获得相同的结果。我一直试图在端口 3000 上运行所有东西,听起来空间不足可能导致我的问题是它可以在一天而不是下一天工作。

以上是关于如何在本地机器上的 2 个流星应用程序之间可靠地共享 mongo 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 2 台机器上的 2 个本地 git 存储库合并为一个?

检查流星项目中的mongodb版本

如何在流星包中指定本地 npm 模块

本地数组更改时如何重新渲染流星火焰模板?

如何使用卡在加载屏幕上的铁路由器调试流星/科尔多瓦应用程序?

如何在不同机器上的两个电子应用之间进行交互