2016-03-25 14 views
1

Ich habe Probleme mit der Bereitstellung meiner NodeJs-App. Ich verwende Express, MySQL und die grundlegende Express-Struktur für meine App. Wenn ich die App-URL auf openshift öffne, erhalte ich die Fehlermeldung 503. Auf dem nodejs.log kann ich das sehen:Die NodeJS-App funktioniert nach der Bereitstellung nicht bei OpenShift.

Warning: connect.session() MemoryStore is not 
designed for a production environment, as it will leak 
memory, and will not scale past a single process. 
Pipe 8080 is already in use 

Die Anwendung wird mit ./bin/www ausgeführt. Dies ist der Code, den ich in dieser Datei haben:

#!/usr/bin/env node 

/** 
* Module dependencies. 
*/ 

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

/** 
* Get port from environment and store in Express. 
*/ 

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080; 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

/** 
* Listen on provided port, on all network interfaces. 
*/ 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

/** 
* Normalize a port into a number, string, or false. 
*/ 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
    // named pipe 
    return val; 
    } 

    if (port >= 0) { 
    // port number 
    return port; 
    } 

    return false; 
} 

/** 
* Event listener for HTTP server "error" event. 
*/ 

function onError(error) { 
    if (error.syscall !== 'listen') { 
    throw error; 
    } 

    var bind = typeof port === 'string' 
    ? 'Pipe ' + port 
    : 'Port ' + port; 

    // handle specific listen errors with friendly messages 
    switch (error.code) { 
    case 'EACCES': 
     console.error(bind + ' requires elevated privileges'); 
     process.exit(1); 
     break; 
    case 'EADDRINUSE': 
     console.error(bind + ' is already in use'); 
     process.exit(1); 
     break; 
    default: 
     throw error; 
    } 
} 

/** 
* Event listener for HTTP server "listening" event. 
*/ 

function onListening() { 
    //var addr = server.address(); 
    var addr = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    debug('Listening on ' + bind); 
} 

Antwort

1

Der Fehler trat auf, weil die OPENSHIFT_NODEJS_PORT Variable nicht auf die Anwendung des Servers festgelegt wurde. Dies führt dazu, dass die Anwendung den hardcoded Port (8080) verwendet.

Um dies zu beheben, müssen Sie die Umgebungsvariable OPENSHIFT_NODEJS_PORT auf dem Server Ihrer Anwendung festlegen. Dies kann gemacht werden:

$ rhc env set OPENSHIFT_NODEJS_PORT=<Value> -a App_Name 

wo <Value> ist die Port-Nummer, die Sie verwenden möchten und App_Name ist der Name Ihrer Anwendung.

Sie können here

+1

Ty @gnerkus mehr über den Umgang mit Umgebungsvariablen auf Openshift lesen! Aber irgendwie kann ich die Portnummer nicht einstellen ... Wenn ich einen Port auf schreibe (übrigens, welchen Port soll ich hören?), Bekomme ich die folgende Nachricht: Einstellung Umgebungsvariable (n) ... OPENSHIFT_NODEJS_PORT kann nicht überschrieben werden Eigentlich, wenn ich rcc env show list -a App_name ausführen, wird nichts angezeigt ... – ArtanisAce

Verwandte Themen