【问题标题】:Meteor without mongo没有mongo的流星
【发布时间】:2013-09-03 22:48:43
【问题描述】:

在 0.6.5 版本中,可以使用流星开发非 Web 应用程序。 我从头开始为 ARM 处理器重建它,但我根本不需要数据库支持。 (Mongo 是处理器杀手,占用空间很大,我根本不需要它)

ARM 应该只作为 DDP 客户端工作,考虑到这一点,我在没有 mongo 的情况下手动构建它。

并尝试构建最简单的应用程序 开始时只有 1 个包(已删除所有标准包)

meteor

和服务器文件夹中的一个文件

main = function(argv){
  return "DAEMON"
}

Meteor.setInterval(function(){
  console.log("HellOnWorld");
},1000);

在安装了完整流星的机器上,它按预期工作 但没有安装 mongo 我得到了错误

Unexpected mongo exit code 127. Restarting.
Unexpected mongo exit code 127. Restarting.
Initializing mongo database... this may take a moment.
Unexpected mongo exit code 127. Restarting.
Can't start mongod

显然我没有也想要 mongo。

有什么方法可以不用等待 mongo db 就可以启动流星?

Meteor 团队计划支持其他数据库,因此迟早必须实施。

【问题讨论】:

  • 好像错了。有一个建议:您是否尝试过创建一个包而不是在开发模式下运行 Meteor?
  • 不,因为我正在尝试使用流星进行嵌入式编程,并且我需要在开发模式下使用它来编写低级板支持包(中断等)我有 this DDP Client 的工作原型。现在我想将封装系统的力量转移到板上
  • 根据您的建议。是否可以在没有启动和运行开发模式的情况下为 ARM 内核创建捆绑包??
  • Meteor 现在升级到版本 0.7.0.1。没有 mongo db 会更容易运行吗?
  • @Spina:是的。检查my answer。您可以简单地将 MONGO_URL 指向一个无效的 URL。

标签: mongodb meteor


【解决方案1】:

Meteor 1.2.1 - 设置好了

MONGO_URL=none

用于环境变量。 (none 不是关键字,任何无效的东西都会阻止 mongo 启动)

【讨论】:

  • 这是一个更准确的答案,+1 给你
【解决方案2】:

列出的答案不适用于 Meteor 1.x。 以下是我在没有 mongodb 的情况下运行流星的方法,并且不需要修改流星中的任何内容(源代码和包配置)。

  1. git 克隆https://github.com/solderzzc/mongodb-fs
  2. cd mongodb-fs && npm install && node samples/test-server.js

    如果一切顺利,您将看到以下控制台日志

  3. meteor create --example 排行榜 && cd 排行榜

    MONGO_URL=mongodb://localhost:27027/fakedb meteor

将点添加到播放器,并使用 mongo 命令行检查: mongo localhost:27027/fakedb

【讨论】:

    【解决方案3】:

    更新

    对于较新版本的 Meteor,您需要删除 mongo 包。 mongo 包嵌入在meteor-platform 包中。所以你需要删除它并添加所有其余部分(来自https://github.com/meteor/meteor/tree/devel/packages/meteor-platform):

    meteor remove meteor-platform
    meteor add  meteor webapp logging tracker session ddp blaze spacebars templating check underscore jquery random ejson templating check underscore jquery random ejson
    

    那么您的应用将不再使用 Mongo :)。

    在开发模式下,您可以通过将 MONGO_URL 环境变量设置为其他值并启动流星来摆脱 mongo。例如:MONGO_URL=mongodb://nowhere meteor

    【讨论】:

    • 感谢您的完整回答。
    • 希望对您有所帮助!!如果您有时间,请在博客上介绍您为 pi 构建的经验,因为从头开始非常困难 =)
    • 目前我正在使用另一个“自建”臂板,但绝对可以分享知识:)
    • 这不适用于流星 1.0.5 。错误提示“ReferenceError: Meteor is not defined”。
    • @FabrizioFortino 将其更新为 1.0.5。请记住,您可以使用任何提交,只需从 package.js 中引用的链接中获取包列表,然后取出您不需要的任何包。
    【解决方案4】:

    事实证明,如果您在运行流星之前设置任何 MONGO_URL 环境变量,它不会启动其本地 MongoDB!非常适合测试不依赖于 Mongo 的包。

    之前:

    $ meteor test-packages ./
    Testing fortawesome:fontawesome-compat...
    [[[[[ Tests ]]]]]
    
    => Started proxy.
    => Started MongoDB.
    => Started your app.
    
    => App running at: http://localhost:3000/
    

    之后

    $ MONGO_URL=mongodb://mysql.com meteor test-packages ./  # haha
    Testing fortawesome:fontawesome-compat...
    [[[[[ Tests ]]]]]
    
    => Started proxy.
    => Started your app.
    
    => App running at: http://localhost:3000/
    

    看,妈妈,没有 Mongo!

    我已经确认没有启动mongo进程,也没有创建.meteor/local/db文件夹。

    【讨论】:

      【解决方案5】:

      在 Meteor 0.6.5 中,您可以在 Meteor 包中嵌入 TingoDb,这是 MongoDB API 的 Node.js 实现:

      1) 转到您的包中的programs/server 目录并执行npm install tingodb 以将TingoDb 添加到您的包中。

      2) 在programs/server/packages/mongo-livedata.js 的顶部附近,与所有其他Npm.require 语句一起,添加以下行

      var Db = Npm.require('tingodb')().Db;
      

      3) 在同一个文件 (programs/server/packages/mongo-livedata.js) 中替换以下代码块

      MongoDB.connect(url, options, function(err, db) {
        if (err)
          throw err;
        self.db = db;
      
        Fiber(function () {
          // drain queue of pending callbacks
          _.each(self._connectCallbacks, function (c) {
            c(db);
          });
        }).run();
      });
      

      使用此代码:

      var db = new Db('path/to/your/db/directory', {});
      self.db = db;
      Fiber(function () {
        _.each(self._connectCallbacks, function (c) {
            c(db);
          });
      }).run(); 
      

      path/to/your/db/directory 可以在任何地方,但默认情况下是相对于包中的programs/server 目录。

      4) 要运行 Meteor 包,它希望您导出一个名为 MONGO_URL 的环境变量。您可以深入研究代码并删除对此的检查,但由于它从未使用过,您可以轻松地导出一个假的 MONGO_URL,就像您捆绑包的 README 文件中的那个:

      export MONGO_URL='mongodb://user:password@host:port/databasename'
      

      5) 从你的包的基本目录运行node main.js

      警告购买者:显然你在这里搞乱了 Meteor 的内部结构,这几乎肯定会在未来的版本中中断。

      【讨论】:

      【解决方案6】:

      作为一种奇怪的可能性,在正确的端口上创建一个模拟 mongo 服务器,并设置你的环境变量来访问它。我敢打赌,您只需要实施几个握手程序,之后就不会再有流量了。超出了我的能力范围,但它确实具有不需要随着事情的变化而对代码进行更改的优势。

      【讨论】:

      猜你喜欢
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多