1

私のapp.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.");

アプリケーションをローカルで実行すると、次のコマンドを実行することで正常に実行されます。

ノードapp.js

ただし、次のコマンドを使用してアプリケーションをCloudFoundryにプッシュすると次のようになります。

vmc push [app_name] --runtime = node06

次のエラーが発生します。

アプリケーションの作成:OKアプリケーションのアップロード:
使用可能なリソースの確認:OK
リソースの処理:OK
アプリケーションのパッキング:OK
アップロード(10K):OK
プッシュステータス:OKステージングアプリケーション'app_name':OK
アプリケーションの開始'app_name':.....。 ...................。

エラー:アプリケーション[app_name]を開始できませんでした。以下の情報をログに記録します。

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

node.js:134 throw e; // process.nextTickエラー、または最初のティックでの'error'イベント^ReferenceError:mNameが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)atArray。(module.js:430:10)EventEmitter._tickCallback(node.js:126:26)

config.jsのグローバルオブジェクトに設定したプロパティがmain.jsに引き継がれていないようです。mNameだけでなくglobal.mNameを明示的に参照するようにmain.jsを変更することでこれを確認しましたが、そのエラーはなくなりましたが、グローバルオブジェクトプロパティへの別の参照が文句を言い始めました。

明示的な「グローバル」がなくても、すべてがローカルで正常に機能するためです。参照、「グローバル」を明示的に参照する必要はないと思います。それらの変数について。ここに欠けているものはありますか?どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

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 を上書きしているため、作業が中断されます。

したがって、scripts オブジェクトを含む package.json は問題を解決します :-)

于 2012-06-13T18:36:04.213 に答える