2015-07-20 10 views
8

Próbuję wdrożyć moją aplikację node.js (z plikiem express i mangusta) do openshift i nie jestem w stanie tego zrobić. Aplikacja działa idealnie w moim lokalnym środowisku.Nie można uruchomić aplikacji (port 8080)

moim punktem wyjścia jest plik/bin/www

Ja utwierdzę to jako punkt wyjścia na openshift z tej linii w pliku package.json (za this thread):

"main": "bin/www", 

mam zadbał, aby ustawić moje połączenie MongoDB za pomocą zmiennych środowiskowych według przewodnika tak:

// 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); 

błąd, który pojawia się:

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://[email protected]/~/git/codebl 
og.git/ 
    29635a8..7a0e926 master -> master 

Jest to dla mnie szczególnie ważne, ponieważ nie określam portu 8080 w dowolnym miejscu. W rzeczywistości domyślny port jest określony tutaj:

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); 

Nie jestem naprawdę pewien, dokąd się udać. Wydaje mi się, że nie mam wystarczająco dużo informacji, aby określić mój następny krok.

[edycja] Dodałem trochę logowania, aby przetestować port, na którym działa, ale instrukcja rejestrowania nigdy nie jest uruchamiana. Oto kod

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); 

i wyjście

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 jest z oświadczeniem rejestrowania na początku pliku punktu wejścia. Wydaje się, że coś nie działa, zanim trafi na console.log("PORT: ", port); Prawdopodobnie jest to związane z app.js, w którym nawiązano połączenie MongoDb.

[/ edit]

+0

console.log (port) ';' i zobaczyć, co daje –

+0

konfigurację post z was serwisu aplikacyjnego dla ruchu HTTP nie ma nic wspólnego z MongoDB. Przestań dodawać nietrafne znaczniki do swojego pytania. –

+0

Podobne komunikaty o błędach, które pojawiły się na tych tablicach, wskazują na problem z łańcuchem połączenia MongoDb. Nie chcę tego wykluczać jako możliwej przyczyny bez bardziej merytorycznego zapytania. –

Odpowiedz

11

Błąd okazał się ogólnym błędem, który nie miał nic wspólnego z portem. Wygląda na to, że jeśli wystąpi jakikolwiek fatalny błąd javascript, to ten komunikat jest wyświetlany.

1

Nie sądzę, że ta linia będzie stworzyć serwer na określonym porcie

var server = http.createServer(app); 

trzeba będzie powiedzieć jej słuchać na porcie tak:

server.listen(port); 
1

Podczas słuchania Twojej aplikacji na poprawnym porcie brakuje tylko tego, że nie określisz adresu IP, na którym chcesz nasłuchiwać. Dodaj coś podobnego do poniższego app.set ("port", port);

app.set('ipaddr', server_ip_address); 
5

Wspomniałem tu szczegółowo ... Application 'appname' failed to start (port 8080 not available) on open shift node app

Rozwiązanie to trzeba podać adres IP serwera podczas słuchania.

Tak naprawiłem.

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(); 
}); 
10

Gdyby dokładnie ten sam komunikat o błędzie: Application 'appname' failed to start (port 8080 not available) on open shift node app

Po dużo czytania okazało się, że wiele różnych użytkowników przyszedł do różnych rozwiązań dla tego samego komunikatu o błędzie, w tym ja. Więc radzę nie szukać szybkich rozwiązań dla tego błędu. Najważniejszym krokiem jest krok 1 na poniższej liście.

Moje rozwiązanie polegało na dodaniu brakującej zależności w package.json, dla mojego konkretnego przypadku musiałem dodać "bcrypt":"~0.8.5", taką głupią rzecz!

Teraz, w jaki sposób mogę rozwiązać ten problem tylko znając "Port 8080 niedostępne" błąd:

  1. ssh'd do aplikacji, udał się do katalogu app repo (cd $OPENSHIFT_REPO_DIR) i uruchomić npm start
  2. Got [...] Error: Cannot find module 'bcrypt' [...]
  3. Wylogowano z ssh, uruchom npm info bcrypt | grep "version:", powrócił "0.8.5"
  4. Dodane wejścia "bcrypt": "~ 0.8.5" do mojego package.json i zaangażowani/pchnął zmian.
  5. Problem rozwiązany, działa aplikacja!
+2

Próbowałem dowiedzieć się, jak uzyskać aplikację innej firmy działającą na mojej instancji, zalecenie 'npm start' w aplikacji ssh'd dało mi narzędzia do naprawy problemy, które miałem. Dzięki! – mxplusb

0

Dla mnie był to ciąg połączenia. Ta, która została zasugerowana zaraz po utworzeniu wkładu mongody, nie działa: Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/'nodejs'

Ale z tego article, używając zmiennej OPENSHIFT_MONGODB_DB_URL zadziałało.

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

}

Powiązane problemy