流星没有蒙戈

时间:2013-08-31 07:55:40

标签: mongodb meteor

随着0.6.5的发布,可以用流星开发非网络应用程序。 我从头开始为ARM处理器重建它,但我根本不需要DB支持。 (Mongo是一个处理器杀手,占用空间很大而我根本不需要它)

ARM应该仅作为DDP客户端工作,考虑到这一点,我手动构建它而不使用mongo。

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

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团队计划支持其他数据库,因此必须迟早实施。

6 个答案:

答案 0 :(得分:19)

<强>更新

对于较新版本的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

答案 1 :(得分:9)

事实证明,如果您在运行meteor之前只设置任何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进程,也没有创建.meteor/local/db文件夹。

答案 2 :(得分:7)

在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)从你的bundle的基目录运行node main.js

警告经纪人:显然你在这里乱搞Meteor内部,这几乎肯定会打破未来的版本。

答案 3 :(得分:5)

流星1.2.1 - 只需设置

MONGO_URL=none

表示环境变量。 (none不是关键字,任何无效似乎都会阻止mongo启动)

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

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

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

    enter image description here

  3. meteor create --example leaderboard&amp;&amp; cd排行榜

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

  4. 向玩家添加点,并使用mongo命令行进行检查: mongo localhost:27027 / fakedb

    enter image description here