【问题标题】:How do I use an existing MongoDB in a Meteor project?如何在 Meteor 项目中使用现有的 MongoDB?
【发布时间】:2012-05-22 05:10:02
【问题描述】:

假设有一个 GUI 客户端(wxPython)正在运行一段时间的 MongoDB 服务器。

如何将我的新 Meteor 项目连接到我的已经存在的 MongoDB

【问题讨论】:

标签: meteor


【解决方案1】:

使用环境变量 MONGO_URL。 比如:

export MONGO_URL=mongodb://localhost:27017/your_db

your_db 替换为meteor 或您想使用的任何数据库。

【讨论】:

  • 我卡住了。你能解释一下如何用“meteor”替换 your_db
  • 请注意,如果部署到流星,这将不适用于 prod -- 请参阅 stackoverflow.com/questions/21971036/…
  • @SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_name 会将数据放入名为 my_database_name 的数据库中。他的意思是,如果你愿意,你可以export MONGO_URL=mongodb://localhost:27017/meteor。以为我会建议将您的数据库名称命名为与您的项目相同。
  • 可以用一些配置文件来完成吗?用settings.json试过了,不行
  • 这让我的本地应用崩溃了。
【解决方案2】:

我们使用npm:

  • 使用npm init 创建一个package.json 文件(如果您还没有的话)。

  • 在该文件中输入并修改以下行(替换所有<...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • 然后您可以使用 npm run meteor 启动 meteor

【讨论】:

  • 'MONGO_URL' 未被识别为内部或外部命令
  • 它是一个环境变量,请确保= 符号周围没有空格
【解决方案3】:

the comments to danny's answer Tom Wijsman recommends patching packages/mongo-livedata/mongo_driver.js 中,第 21 行。一个更好的地方是在 app/meteor/run.js,第 460 行。这样,如果存在环境变量,仍然会被拾取,例如就像在 Heroku 上运行 Meteor 一样。只需将默认硬编码的 mongodb://127.0.0.1 更改为 MongoDB 服务器的位置即可。

【讨论】:

    【解决方案4】:

    您可以使用 db.copyDatabase 来执行此操作,但需要注意的是存在错误并且您无法更新 Meteor 中的数据。见https://github.com/meteor/meteor/issues/61

    如果您使用 Meteor 的开发版本,您可以通过启动 Meteor 应用程序从正在运行的 MongoDB 服务器传输数据,然后执行以下操作:

    mongo --port 3002
    

    这会将您连接到 Meteor 应用的 Mongo 服务器。现在像这样使用 db.copyDatabase:

    db.copyDatabase('myappDatabase', 'meteor', 'localhost');
    

    这会将数据库 myappDatabase 从运行在 localhost 标准端口上的 MongoDB 服务器复制到 Meteor 应用程序 Mongo 服务器。 Meteor 应用使用的数据库名称是“meteor”。

    【讨论】:

      【解决方案5】:

      只需将数据复制到 Meteor MongoDB 数据库 - 没有理由尝试将 Meteor 连接到现有数据库并冒覆盖内容的风险。

      使用mongoexport 单独转储您的集合,然后使用mongoimport 将文件导入Meteor MongoDB 实例中名为meteor 的数据库中。 Meteor MongoDB 实例运行在 3002 端口,bind_address 为 127.0.0.1,数据文件在 Meteor 项目子目录.meteor/local/db

      如果您不熟悉 MongoDB 中的导入/导出,请参阅 the documentation

      【讨论】:

      • 这是否意味着我们应该将mongodb托管交付给meteor而不是通过其他方式托管?
      • @Drake:除非您可以调整 Meteor 以使用您的数据库。 app/lib/mongo_runner.js 决定如何启动它(您甚至可能不需要启动代码,因此请研究如何禁用它)。与它的连接似乎发生在packages/mongo-livedata/mongo_driver.js 内部,我认为您可以简单地更改第 21 行的 url 参数。如果您想知道它的值,请在前面的行插入console.log(url);,重新启动 Meteor 并观察您的 Meteor 输出密切。确保你确实在你的应用程序中调用了 Meteor 一次以触发它......
      • @Drake:如果您希望我将我的评论作为答案(如果它对您有用),请告诉我。
      • @TomWijsman:我试过console.log(url); 并得到了信息!我建议您将其作为解决方法的答案来完成,因为我相信它确实为社区提供了帮助,或者至少,像我这样还不熟悉流星的人~
      • 使用 mongochef 复制和粘贴数据比导出/导入命令要容易得多。 3t.io/mongochef
      【解决方案6】:

      我所做的只是添加了我的数字海洋水滴服务器的 IP,而不是本地主机,并且它起作用了:

      env: {
            ROOT_URL: 'http://yourdomain.com',
            MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
            PORT: 3002,
          },
      

      编辑: 使用 MUP 部署您的流星项目:https://github.com/zodern/meteor-up

      env: {
            ROOT_URL: 'https://www.example.com',
            MONGO_URL: 'mongodb://localhost/meteor',
          },
      

      Mup 使用 Docker,并将“链接”您的 2 个容器,从而将应用程序和 mongo 托管在同一个 VM(服务器)上。出于安全原因,不应从公共 IP 访问您的 mongoDB。

      【讨论】:

      • 你在哪里添加的?
      • 将虚拟机的公共 IP 用于 mongoDB 实际上是一种不好的做法,我将更新我的答案以使用 localhost。
      【解决方案7】:

      花了很多时间,发现它需要在URL周围加上引号:

      export MONGO_URL='mongodb://localhost/meteor'
      export MONGO_OPLOG_URL='op log url'
      

      【讨论】:

        【解决方案8】:

        您必须让您的应用程序在一个终端窗口中运行,然后打开另一个窗口并输入“meteor mongo”,它应该可以工作!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-01
          • 2016-05-14
          • 1970-01-01
          • 1970-01-01
          • 2016-03-02
          • 1970-01-01
          相关资源
          最近更新 更多