2012-06-03 4 views
1

Мой app.js файл выглядит следующим образом:Node.js приложение работает локально, но не в облаке

var port = (process.env.VMC_APP_PORT || 3000); 
var host = (process.env.VCAP_APP_HOST || 'localhost'); 
var http = require('http'); 
var rip = require('./config.js'); 

http.createServer(function (req, res) { 
     //do nothing...no response expected via http 
}).listen(port, host); 

config.js файл содержит это (и многое другое, но сократить для краткости/релевантности):

//several global.<property_name> assignments 
global.mName     = "Application Name"; 
//serveral more global.<property_name> assignments 
... 
... 
require("./main.js"); 

main.js файл начинается так:

console.log(mName+" >>> Loading."); 

Когда я запустить приложение локально, он выполняет отлично, выполнив:

node app.js

Однако, когда я нажимаю приложение к облаку литейный, используя следующую команду:

vmc push [app_name] --runtime=node06

Я получаю следующее сообщение об ошибке:

Creating Application: OK Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (10K): OK
Push Status: OK Staging Application 'app_name': OK
Starting Application 'app_name': ..........................

Error: Application [app_name] failed to start, logs information below.

====> /logs/stderr.log <====

node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ReferenceError: mName is not defined at Object. (/var/vcap/data/dea/apps/app_name-0-6996d737ed319bcffaf696d653423d7c/app/main.js:6:1) at Module._compile (module.js:411:26) at Object..js (module.js:417:10) at Module.load (module.js:343:31) at Function._load (module.js:302:12) at Array. (module.js:430:10) at EventEmitter._tickCallback (node.js:126:26)

Похоже, что свойства, которые я поставил в глобальный объект в config.js не переносится в main.js. Я проверил это, изменив main.js, чтобы явно ссылаться на global.mName, а не просто на mName, и эта ошибка исчезла, но затем снова стала жаловаться на глобальное свойство объекта.

Поскольку все работает нормально локально без явного «глобального». ссылка, я не думаю, что мне нужно будет явно ссылаться на «глобальные». для этих переменных. Здесь что-то не хватает? Любая помощь приветствуется.

Спасибо!

ответ

2

Идите вперед и добавьте следующий файл package.json в корневой директории вашего приложения:

{ 
    "name":"hello-node", 
    "version":"0.0.1", 
    "scripts": { 
    "start": "app.js" 
    } 
} 

Теперь то, что package.json делает для вас в этом случае, это говорит, что cloudfoundry.com файл сценария запуска/запуска должен быть «app.js»

Причина, по которой вам нужно иметь это место, - это потому, что у вас также есть файл «main.js». В cloudfoundry.com, по умолчанию файл main.js закончил писать ваш app.js, чтобы он нарушил вашу работу.

Так что package.json с объектом скриптов в нем исправляет проблему :-)

Смежные вопросы