Meteor和Cloud9配合使用

5
在Cloud9中尝试运行Meteor时,我会遇到以下错误之一:
在运行来自Cloud9的旧修改版本时,我会遇到以下错误:
No dependency info in bundle. Filesystem monitoring disabled.
=> Errors prevented startup:
Exception while bundling application:
Error: Package not found: standard-app-packages
    at self.api.use (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/tools/bundler.js:113:17)
    at Array.forEach (native)
    at Function._.each._.forEach (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
    at Object.self.api.use (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/tools/bundler.js:110:9)

当我尝试运行最新版时,我从cloud9收到了一个错误消息:
Cloud9  Error: you may be using the wrong PORT & HOST for your server app
        Node: use 'process.env.PORT' as the port and 'process.env.IP' as the host in your scripts. See also https://c9.io/site/blog/2013/05/can-i-use-cloud9-to-do-x/

在这两种情况下,我克隆相应的GitHub存储库并运行export BIND_IP=$IPexport PORT=20000(在多个帖子中都有描述)。我还放弃了使用默认的MongoDB服务器,而是将MONGO_URL导出到免费的数据库,托管在https://www.mongohq.com/上。

我还尝试将从cloud9的Meteor版本合并到主版本的拉取请求,但那些文件甚至不再存在。我能找到的其他一切都是关于Meteor版本0.6.5和0.5的。

试图修改最新的Meteor版本,我搜索了httpServer.listen调用,但我只在meteor/packages/webapp/webapp_server.js中找到了一个,似乎在达到这段代码之前(如果它被执行),cloud9错误就被抛出了。所以必须有另一段代码绑定到了错误的地址或端口。

我使用的插件包括:

standard-app-packages
insecure
preserve-inputs
underscore
backbone
jquery
accounts-ui
accounts-base
accounts-password
accounts-facebook
accounts-google
coffeescript

更新:

经过几个小时的寻找解决方案,我取得了很大进展。问题出在meteor/tools/run-proxy.js文件中:

在第94行代码中,你可以看到:self.server.listen(self.listenPort, function () { 这里缺少相应的IP地址,用于将服务器绑定到该地址。现在Meteor以前使用环境变量BIND_IP,我们可以再次引入它,但这会对Cloud9产生不必要的额外更改,因为他们将当前IP地址导出到IP变量中,服务应该将自己绑定到该变量所指示的地址。所以我将有问题的那一行改为: self.server.listen(self.listenPort, process.env.IP, function () {

我还另外修改了meteor/tools/run-all.js文件,因为我不确定是否使用了正确的端口参数。在第24行中,我用var listenPort = process.env.PORT;替换了var listenPort = options.port;

虽然现在我终于可以启动应用程序了,但它仍然没有运行,并且我得到以下输出:

=> Running Meteor from a checkout -- overrides project version (0.7.2)
[[[[[ ~/<PROJECT_ID>/<PROJECT_NAME> ]]]]]

=> Started proxy.
W20140321-22:31:42.591(-4)? (STDERR) 
W20140321-22:31:43.036(-4)? (STDERR) events.js:72
W20140321-22:31:43.037(-4)? (STDERR)         throw er; // Unhandled 'error' event
W20140321-22:31:43.037(-4)? (STDERR)               ^


 Cloud9  Error: you may be using the wrong PORT & HOST for your server app
         Node: use 'process.env.PORT' as the port and 'process.env.IP' as the host in your scripts. See also https://c9.io/site/blog/2013/05/can-i-use-cloud9-to-do-x/
W20140321-22:31:43.108(-4)? (STDERR) Error: listen EACCES
W20140321-22:31:43.109(-4)? (STDERR)     at errnoException (net.js:901:11)
W20140321-22:31:43.109(-4)? (STDERR)     at Server._listen2 (net.js:1020:19)
W20140321-22:31:43.111(-4)? (STDERR)     at listen (net.js:1061:10)
W20140321-22:31:43.111(-4)? (STDERR)     at net.js:1143:9
W20140321-22:31:43.112(-4)? (STDERR)     at dns.js:72:18
W20140321-22:31:43.112(-4)? (STDERR)     at process._tickCallback (node.js:415:13)
=> Exited with code: 8

然而,Meteor并没有崩溃,异常持续不断地出现。因此,我最初认为异常是由于MongoDB的身份验证错误引起的,因为MongoDB的错误代码8也表示身份验证错误。但是,当我在我的MongoHQ托管数据库上使用无效的用户名和密码时,我得到的就是这个:

[...]
=> Started proxy.
W20140321-22:54:17.282(-4)? (STDERR) 
W20140321-22:54:18.700(-4)? (STDERR) /var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/mongo_client.js:400
W20140321-22:54:18.777(-4)? (STDERR)               throw err
W20140321-22:54:18.778(-4)? (STDERR)                     ^
W20140321-22:54:18.778(-4)? (STDERR) MongoError: auth fails
W20140321-22:54:18.778(-4)? (STDERR)     at Object.toError (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/utils.js:110:11)
W20140321-22:54:18.779(-4)? (STDERR)     at /var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js:34:33
W20140321-22:54:18.779(-4)? (STDERR)     at /var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/db.js:1670:9
W20140321-22:54:18.779(-4)? (STDERR)     at Server.Base._callHandler (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/connection/base.js:382:41)
W20140321-22:54:18.780(-4)? (STDERR)     at /var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/connection/server.js:472:18
W20140321-22:54:18.780(-4)? (STDERR)     at MongoReply.parseBody (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
W20140321-22:54:18.780(-4)? (STDERR)     at null.<anonymous> (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/connection/server.js:430:20)
W20140321-22:54:18.781(-4)? (STDERR)     at EventEmitter.emit (events.js:95:17)
W20140321-22:54:18.781(-4)? (STDERR)     at null.<anonymous> (/var/lib/stickshift/532a1c97500446885f0002a8/app-root/data/meteor/packages/mongo-livedata/.build/npm/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:191:13)
W20140321-22:54:18.782(-4)? (STDERR)     at EventEmitter.emit (events.js:98:17)
=> Exited with code: 8

这个错误在 meteor/packages/mongo-livedata/mongo_driver.js 的第149行抛出:

147:      MongoDB.connect(url, mongoOptions, function(err, db) {
148:        if (err)
149:          throw err;
150:        self.db = db;

这也没问题,但是当我的凭证正确时发生的另一个错误我找不到出处。

4个回答

9

我最初也遇到了类似的问题,但Meteor的最新版本(0.9.0)至少使这变得容易了。

meteor run --port=$IP:$PORT

看来已经起到作用了(至少目前为止)

这在文档中有说明

meteor help run

htc

安迪


是的,显然这是旧版本中的一个漏洞,所以我很高兴看到他们现在修复了它。 - peter
目前它没有“等于”符号: meteor run --port $IP:$PORT - Paweł Smołka

1

Meteor在c9.io上运行非常好,我正在c9.io上使用Meteor。只需按照以下步骤操作。

  1. 选择nodejs作为工作区。

  2. 在终端中输入命令“curl https://install.meteor.com/ | sh”

  3. 在终端中输入$ meteor create newapp(您的主应用程序文件夹名称)

  4. 在终端中输入cd newapp

  5. 在终端中输入$ meteor -p 8080(注意-p或--port,如果您使用300端口,则无法在c9.io上正常工作。因此,您应该使用8080、8081或8082端口)

  6. 几秒钟后,您会得到一个链接,应用程序正在运行:localhost:8080

  7. 点击链接并打开它。


1

好的,实际上问题的第一部分是正确答案,如果我没有反过来做:

BIND_IPmeteor/packages/webapp/webapp_server.js 中使用,但在 meteor/tools/run-proxy.js 中未使用。然而,两者都需要绑定到 cloud9 的“IP”变量。

因此,为了解决这个问题,只需更新代理,类似于我所做的那样,以使用正确的 IP 地址:self.server.listen(self.listenPort, process.env.IP, function () {

并且只需在您的 .bashrc 中编写 export BIND_IP=$IP

现在一切顺利(前提是您在 cloud9 外部使用 mongodb)

我在我的博客中总结了必要的步骤: http://peter.grman.at/how-to-run-meteor-in-cloud9/


0

Meteor 1.4:

一开始,我尝试了很多不同的变化,有些带有--port标志,有些没有,这是在Andrew的回答中提到的。

  • 如果我只运行没有任何标志的meteor命令,应用程序将成功启动在端口3000上,但显然该端口不能在Cloud9中使用(https://docs.c9.io/docs/multiple-ports)

  • 如果我使用了--port标志,Meteor将会停留在“Starting your app”上

最有可能的是,在整个重试过程中出现了问题,因为最终修复它的方法可能是在启动应用程序之前运行meteor reset(Meteor application - Stuck at "Starting your app" when trying to run):

...$ sudo meteor reset
...$ sudo meteor --port=$IP:$PORT

如果这不起作用,我还添加了一些详细的日志记录,记录了最终成功尝试的过程(请参阅Meteor论坛帖子:Meteor stuck at starting your app)。如果你仍然卡住了,请尝试这个方法:
...$ sudo meteor reset
...$ METEOR_PROFILE=1
...$ METEOR_LOG=debug
...$ sudo meteor --port=$IP:$PORT --verbose

第一次成功后,现在我只需要一个命令就可以启动应用程序:

...$ sudo meteor --port=$IP:$PORT

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