2012-05-19 64 views
1

我使用cloud9 ide编码的新项目。当我从cloud9ide部署到cloudfoundry时。我有错误cloud9 + mongodb + nodejs

应用程序启动失败。请注意,CloudFoundry使用不同的端口来收听。当调用'listen()'时,像'.listen(process.env.PORT || process.env.VCAP_APP_PORT)'一样使用它。

这是我的源

VAR端口=(process.env.VMC_APP_PORT || 3000);

var host =(process.env.VCAP_APP_HOST ||'localhost');

var http = require('http');

var env = process.env.VCAP_SERVICES? JSON.parse(process.env.VCAP_SERVICES):null;

var mongodata = env ['mongodb-1.8'] [0] ['credentials'];

http.createServer(功能(REQ,RES){

res.writeHead(200,{ '内容 - 类型': 'text/plain的'});

res.end(“你好World \ n'+ env); })。listen(port,host);

此源有错误时,我得到蒙戈对象

变种mongodata = ENV [ '的mongodb-1.8'] [0] [ '凭证'];

但没有这条线成功地部署

请帮助我!

非常感谢

+0

这似乎意味着“VCAP_SERVICES”不可用。尝试删除该行。当您访问Web服务器时,您在输出中看到什么?你有'res。end('Hello World \ n'+ env);',所以你应该能够看到这些东西是否真的在'env'中定义。这看起来像是你在做,所以你应该知道。 – Ashe

+0

根据错误信息,第一行不应该是'var port =(process.env.PORT || process.env.VCAP_APP_PORT)'吗? –

回答

0

正如CLOUD9控制台中的错误可能会告诉你(因为它告诉我,当我尝试这个:-)):

haalasdoallalsakdl (CloudFoundry): [5/6] Crash log 
============/logs/stderr.log============ 
node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
TypeError: Cannot read property '0' of undefined 
    at Object.<anonymous> (/var/vcap/data/dea/apps/haalasdoallalsakdl-0-8be0d413a9ec29a79f665d388ce414bd/app/server.js:7:35) 
    at Module._compile (module.js:432:26) 
    at Object..js (module.js:450:10) 
    at Module.load (module.js:351:31) 
    at Function._load (module.js:310:12) 
    at Array.0 (module.js:470:10) 

因此在VCAP_SERVICES没有进入所谓的像那样。当我console.log变量process.env,甚至没有列出任何服务。

所以你必须为你的应用程序安装mongodb服务。最快要做到这一点是通过CF VMC工具(不能在时刻CLOUD9运行它,所以你必须在本地安装此):

vmc create-service mongodb --bind your_app_name 

然后,它会开始了罚款。

N.B.您可以在.yml文件中修复此问题,但我不知道如何执行此操作:-)

+0

>> vmc create-service mongodb - 绑定your_app_name 当我部署窗体本地没有错误,但是当通过c9部署有同样的错误 – user1404596

+0

我刚试过这个,当我把应用程序我试图部署到从Cloud9代替'your_app_name',它工作正常。 –