Node restifyサーバーをコーヒーで書いたのですが、稼働させられないようです。
デプロイ中に次のエラーが発生します。
アプリケーションポート(8080)が使用可能になるのを待機しています...
その後、私は次のエラーを受け取ります
アプリケーション「appname」を開始できませんでした(ポート8080は使用できません)
Coffeescriptに問題があると思われる場合は、回避策があります。 jsに戻したくありません。
私のサーバーコードは:
restify = require 'restify'
Bunyan = require 'bunyan'
server = restify.createServer
name: 'APPNAME'
version: '0.0.1'
log: Bunyan.createLogger
name: 'api'
serializers:
req: ()->
return "bad"
# Usercontroller.access calls a function to process the request
server.post '/user/access', UserController.access
server = create.createServer()
server.listen server_port, ->
console.log "Http server listening on #{server_port}"
require('./document')(server.router.mounts, 'restify')
return
確認する必要がある最初のステップは、〜/ app-root/logs/nodejs.logの下のログを確認することです
私の場合、パッケージやあらゆる種類のアクセスに問題はありませんでした。ログにある唯一の情報は次のとおりです。
エラー:listen [〜#〜] eacces [〜#〜] at errnoException(net.js:905:11)at Server._listen2(net.js:1024:19)
フロントコンソール以外に理由が見つからない場合は、8080にアクセスできないと表示され、ポート番号とともにIPアドレスを指定したことを確認してください。
これは私がそれを修正した方法です。
var express = require('express');
var app = express();
var http = require('http');
app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3002);
app.set('ip', process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1");
http.createServer(app).listen(app.get('port') ,app.get('ip'), function () {
console.log("✔ Express server listening at %s:%d ", app.get('ip'),app.get('port'));
server();
});
前述のように、app.get( 'ip')は、聞くときに非常に重要です。そうでない場合、openshiftはアプリケーションを起動できません。
更新しました:
ログディレクトリに入る方法:
cd $OPENSHIFT_LOG_DIR
Openshift環境によって保存されたログファイルがあります。
これにはいくつかの理由が考えられます。 nodejsが正しく起動しない場合、PaaSは継続的に起動しようとしているようです。ポートの衝突が発生するか、エラーが問題自体とは関係ありません。私の場合、依存関係がありませんでした。問題を解決する最良の方法は、アプリコンテナーでSSHを実行してログファイルを確認することです。tail-f〜/ app-root/logs/nodejs.log
rhc app create ... --from-code ...
および8080を取得できませんか?。
ミハイが answer で説明したように、(port 8080 not available)
はポートの設定方法に関連する必要はありません。したがって、process.env.OPENSHIFT_NODEJS_PORT
とprocess.env.OPENSHIFT_NODEJS_IP
を正しく使用している場合でも発生する可能性があります。
~/app-root/logs/nodejs.log
を確認するアドバイスは大いに役立ちますが、rhc app create ... --from-code ...
でエラーが発生した場合はどうなりますか?アプリは作成されないため、sshしてnodejs.log
を確認することはできません。
限定バージョンでアプリをプッシュしてみてください-できるだけ多くのコードをコメント化してください。
私にとっては、Expressアプリのみの初期化とリスニングから始めることがうまくいきました。次に、openshiftアプリを作成したら、コードを少しずつコメント解除して、nodejs.log
ファイルをプッシュしてチェックしました。
このようにして、私はmongoDb名が"APPNAME_"+process.env.NODE_ENV
であることがわかりましたが、openshiftはAPPNAME
だけを呼び出すmongoDbデータベースを作成しました
。
質問に直接回答していないことをお詫びしますが、8080 not available
はあらゆる種類の設定が原因であるようです。おそらくこれは誰かを助けるでしょう。
エクスプレスを使用する場合:app.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);
または:
var port = process.env.OPENSHIFT_NODEJS_PORT;
var ip = process.env.OPENSHIFT_NODEJS_IP;
app.listen(port, ip);
Openshiftのノードアプリは2ステップのプロセスです:
サーバーを起動する方法へのエントリをpackage.jsonに作成します(アプリへのエントリポイント):
"scripts": {
"start": "node server.js"
},
"main": "server.js"
OPENSHIFT環境変数を使用して、IPとポートを取得します。
process.env.OPENSHIFT_NODEJS_PORT
process.env.OPENSHIFT_NODEJS_IP
詳細については、次を確認してください: OpenShift: "Failed to execute control start" on node application
同じエラーが発生しましたが、それはgithubでポイントしていたブランチに関係していました。
マスターは私のメインブランチ(最初に作成されたブランチ)であり、それを指すとビルドされますが、他のブランチを指すとエラーになります。
mongodbのユーザー名とパスワードを設定して問題を解決しました
それを解決する最良の方法は、ログフォルダーをチェックすることです。サーバーにSSHで接続し、nodejs.log
ファイル、cat nodejs.log
でコンテンツを確認してください。
理由は次のとおりです。
「ポート8080は使用できません」と表示されていても、エラーはファイル内で正しく実行できなかった可能性があるため、最近の変更を確認するか、ログを直接確認してエラーの場所を見つける必要があります。
私の場合、上記のようにrhc ssh
を使用して次のエラーチェックを取得しています。
Unhandled rejection Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer [as oncomplete] (dns.js:124:16)
私は問題を取り除くために設定します
mongo_url = process.env.OPENSHIFT_MONGODB_DB_URL;
マングースuriに。私は以下を試してみましたが
mongo_url = "mongodb://admin:pass@$OPENSHIFT_MONGODB_DB_Host:$OPENSHIFT_MONGODB_DB_PORT/mydbname"
これは機能していませんでした。
これが誰かを助けることを願っています。