【问题标题】:Meteor with cloud9流星与 cloud9
【发布时间】:2017-01-13 10:43:37
【问题描述】:

尝试在 cloud9 中运行流星时遇到以下错误之一:

运行旧的modified version from 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)

当我尝试运行 lastest version 时,我收到来自 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 版本 0.6.5 和 0.5

试图修改最新的 Meteor-version 我找了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 = options.port;var listenPort = process.env.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

但是,流星并没有崩溃,并且异常不断出现。这就是为什么我首先想到,异常是由于 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;

这也可以,但是当我的凭据正确时,我找不到另一个错误来自哪里。

【问题讨论】:

    标签: meteor cloud9-ide


    【解决方案1】:

    我刚开始也遇到了类似的问题,但最新版本的 Meteor (0.9.0) 至少让这件事变得简单了。

    meteor run --port=$IP:$PORT
    

    似乎可以解决问题(至少到目前为止)

    这是文档中的

    meteor help run
    

    安迪

    【讨论】:

    • 是的,这显然是旧版本中的一个错误,所以我很高兴看到他们现在修复了它
    • 目前没有“等号”:meteor run --port $IP:$P​​ORT
    【解决方案2】:

    好的,所以实际上问题的第一部分是正确的答案,如果我没有这样做的话:

    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/

    【讨论】:

      【解决方案3】:

      meteor 在 c9.io 中工作得非常好,我正在 c9.io 和 metor 一起工作。只需按照步骤操作即可。

      1. 选择workshop作为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. 点击链接并打开它。

      【讨论】:

        【解决方案4】:

        流星 1.4:

        起初,我尝试了很多不同的变体,有无 Andrew 的回答中提到的 --port 标志。

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

          李>
        • 如果我使用 --port 标志,meteor 会挂在“正在启动您的应用程序”上

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

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

        如果这没有帮助,我还添加了一些详细的日志记录,最终成功的尝试(参见这个流星论坛帖子: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
        

        【讨论】:

          猜你喜欢
          • 2014-10-27
          • 2012-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-27
          • 2012-10-10
          • 2015-08-02
          • 1970-01-01
          相关资源
          最近更新 更多