Не удалось запустить приложение (порт 8080) недоступно

Я пытаюсь развернуть свой узел.приложение js (с express и mongoose) для openshift, и я не могу этого сделать. Приложение отлично работает в моей локальной среде.

моей точкой входа является файл/bin / www

Я устанавливаю это как точку входа в openshift с этой строкой в пакете.файл json (per этой теме):

"main": "bin/www",

Я обязательно установил соединение mongodb, используя переменные среды в соответствии с гид так:

// default to a localhost configuration:
var mongoConnectionString = 'mongodb://127.0.0.1/code-blog';

// if OPENSHIFT env variables are present, use the available connection info:
if (process.env.OPENSHIFT_MONGODB_DB_PASSWORD) {
  mongoConnectionString = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" +
  process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" +
  process.env.OPENSHIFT_MONGODB_DB_HOST + ':' +
  process.env.OPENSHIFT_MONGODB_DB_PORT + '/' +
  process.env.OPENSHIFT_APP_NAME;
}

mongoose.connect(mongoConnectionString);

ошибка, которую я получаю:

remote: Waiting for application port (8080) become available ...
remote: Application 'codeblog' failed to start (port 8080 not available)
remote: -------------------------
remote: Git Post-Receive Result: failure
remote: Activation status: failure
remote: Activation failed for the following gears:
remote: 558a25bd5973ca7a74000162 (Error activating gear: CLIENT_ERROR: Failed to
 execute: 'control start' for /var/lib/openshift/558a25bd5973ca7a74000162/nodejs

remote: #<IO:0x00000000b49380>
remote: #<IO:0x00000000b49308>
remote: )
remote: Deployment completed with status: failure
remote: postreceive failed
To ssh://558a25bd5973ca7a74000162@codeblog-donaldsubert.rhcloud.com/~/git/codebl
og.git/
   29635a8..7a0e926  master -> master

это peculior для меня, потому что я не указать порт 8080 в любом месте. Фактически, здесь указан порт по умолчанию:

var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || "3000");
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";

app.set('port', port);

var server = http.createServer(app);

Я не совсем уверен, куда идти отсюда. Кажется, у меня недостаточно информации, чтобы определить свой следующий шаг.

[редактирование] Я добавил некоторое ведение журнала, чтобы проверить, на каком порту это работает, но инструкция logging никогда не запускается. Вот код

console.log("TEST TEST TEST");

var app = require('../app');
var debug = require('debug')('ProjectTemplate:server');
var http = require('http');

var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || "3000");
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";

console.log("PORT: ", port);

и вывода

TEST TEST TEST
module.js:340
    throw err;
    ^
Error: Cannot find module './routes/logIn'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/var/lib/openshift/558a25bd5973ca7a74000162/app-root/           runtime/repo/app.js:26:13)

TEST TEST TEST из инструкции ведения журнала в начале файла точки входа. Что-то, кажется, терпит неудачу, прежде чем он попадает в console.log("PORT: ", port); вероятно, это как-то связано с app.js где соединение MongoDb сделано.

[/edit]

6 ответов


имел точно такое же сообщение об ошибке: Application 'appname' failed to start (port 8080 not available) on open shift node app

после долгого чтения выяснилось, что многие разные пользователи пришли к разным решениям для одного и того же сообщения об ошибке, включая меня. Поэтому я бы посоветовал не искать быстрых решений для этой ошибки. Наиболее важным шагом является Шаг 1 в списке ниже.

моим решением было добавить отсутствующую зависимость в пакет.json, для моего конкретного случая мне нужно было добавить "bcrypt":"~0.8.5", такую глупость!

теперь, как я сделал получить, чтобы исправить проблему, зная только" порт 8080 недоступен " ошибка:

  1. ssh'D в приложение, пошел в приложение repo dir (cd $OPENSHIFT_REPO_DIR) и npm start
  2. получил [...] Error: Cannot find module 'bcrypt' [...]
  3. вышел из ssh, запустите npm info bcrypt | grep "version:", он вернулся "0.8.5"
  4. добавлена запись "bcrypt": "~0.8.5 " в мой пакет.json и commited / pushed изменения.
  5. проблема решена, приложение работает!

ошибка оказалась общей ошибкой, которая не имела ничего общего с портом. По-видимому, если есть какая-либо фатальная ошибка javascript, она дает это сообщение.


я подробно упомянул здесь ... не удалось запустить приложение "appname" (порт 8080 недоступен) в приложении open shift node

решение заключается в том, что вам нужно указать 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();
});

Я не думаю, что эта строка создаст сервер на указанном порту

var server = http.createServer(app);

вам нужно будет сказать ему, чтобы слушать на порту так:

server.listen(port);

пока ваше приложение прослушивает правильный порт, отсутствует то, что вы не указываете IP-адрес для прослушивания. Добавьте что-то вроде следующего ниже приложения.set ('port', порт);

app.set('ipaddr', server_ip_address);

для меня это была строка подключения. Тот, который был предложен сразу после создания картриджа mongodb, не работает:Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/'nodejs'

но от этого статьи, С помощью OPENSHIFT_MONGODB_DB_URL переменная это сработало.

if(process.env.OPENSHIFT_MONGODB_DB_URL){
  mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + db_name;

}