没有Mongo的Meteor

15

在0.6.5版本发布后,使用meteor可以开发非Web应用程序。

我从头开始为ARM处理器进行了重建,但我根本不需要数据库支持(Mongo会使处理器效率降低,占用空间过大)。

考虑到ARM只需要作为DDP客户端工作,因此我手动构建了它而没有加入mongo。

为了尽可能地简单,我只启动了一个包(删除了所有标准包)。

meteor

并且在服务器文件夹中有一个文件

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

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

在完全安装Meteor的计算机上,它按预期工作,但没有安装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数据库的情况下启动Meteor?

Meteor团队计划支持其他数据库,所以这个功能迟早会被实现。


似乎不对。有一个建议:您是否尝试创建捆绑包而不是在开发模式下运行Meteor? - imslavko
不行,因为我正在尝试使用Meteor进行嵌入式编程,并且需要在开发模式下编写低级别的板级支持包(中断等)。我已经使用了这个DDP客户端创建了一个工作原型。现在我想将软件包系统的功能移植到板子上。 - Elrot
根据您的建议,是否有可能在没有开发模式运行的情况下为ARM核心创建捆绑包? - Elrot
Meteor现在已经更新到0.7.0.1版本了。如果没有MongoDB,它是否更容易运行? - Spina
2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Dan Dascalescu
6个回答

21

更新

对于最新版本的 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环境变量设置为其他值并启动meteor来摆脱mongo。例如:MONGO_URL=mongodb://nowhere meteor


感谢您提供完整的答案。 - Elrot
希望这能有所帮助!如果你有时间,请写一篇关于你在树莓派上构建的经验的博客,因为从头开始做这件事情相当困难 =) - Tarang
目前我正在使用另一个“自制”的ARM板,但肯定可以分享知识 :) - Elrot
这在 Meteor 1.0.5 中不起作用。错误显示“ReferenceError: Meteor is not defined”。 - Fabrizio Fortino
@Akshat,我不再遇到那个错误了,但是Mongo服务器与我的应用程序一起启动。Meteor 1.1也有同样的问题。 - Fabrizio Fortino
显示剩余3条评论

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!

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


7
在Meteor 0.6.5中,您可以将TingoDb(MongoDB API的Node.js实现)与您的Meteor包一起嵌入:

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 内部问题,这几乎肯定会在未来版本中出现故障。


非常有趣!我已经在Meteor路线图中添加了TingoDb支持。 - Dan Dascalescu

5
Meteor 1.2.1 - 只需设置
MONGO_URL=none

针对环境变量的设置。(none不是关键字,任何无效的内容似乎都会导致Mongo无法启动)


这是一个更准确的答案,向您加1分。 - chulian

2
作为一种奇怪的可能性,可以在正确的端口上创建一个模拟的Mongo服务器,并设置你的环境变量以访问它。我敢打赌,你只需要实现几个握手例程,之后就没有更多的流量了。这超出了我的能力范围,但它的优点是不需要随着事物的变化而采用代码更改。

有几个Mongo mocks存在,但你不需要任何一个。请参阅我的回答 - Dan Dascalescu

0

列出的答案在Meteor 1.x上无法使用。以下是我运行Meteor而不需要修改任何内容(源代码或软件包配置)的方法。

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

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

    enter image description here

  3. meteor create --example leaderboard && cd leaderboard

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

为玩家添加积分,并使用mongo命令行进行检查: mongo localhost:27027/fakedb

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接