2016-04-06 4 views
1

Ошибка при развертывании приложения js для первого узла в openshift.Развертывание приложения nodejs для Openshift (ошибка 503)

Я немного смущен портами.

Я установил это при создании сервера:

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080, 
    server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' 

http.createServer(function (request, response) { 
    return router(request, response); 
}).listen(port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + port) 
}) 

Я вошел в порт. Я получаю 8080. Но, если я хочу слушать websockets, я должен установить вручную на 8080 также (при получении), и я верю, это приводит меня к ошибке, прослушивая тот же порт дважды.

Чтение журналов также прокладывает, что приложение падает на способ создания ws-сервера. Я уверен, что если это порт. Но, как исправить?

Есть ли какой-либо вариант, который я еще не вижу?

Update: Измененное WebSocket порт 8000. Ошибка, кажется, то же самое:

Error: listen EACCES 
at errnoException (net.js:905:11) 
    at Server._listen2 (net.js:1024:19) 
    at listen (net.js:1065:10) 
    at Server.listen (net.js:1139:5) 
    ... 

Но теперь работает локально.

Update2: Мне удалось переключиться на использование одного порта. Моя ошибка, теперь я передаю HTTP-сервер в качестве аргумента для метода создания сервера websocket. Все еще работает локально. код на данный момент:

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080, 
    server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' 

var server = http.createServer(function (request, response) { 
    return router(request, response); 
}) 

server.listen(port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + port) 
}) 

Он падает на сервере слушать линию ...

Update3: Я добавил eventlistner для события сервера «прослушивания» и на местном уровне она выстреливает. Но, согласно журналам о спусках, это не так. ошибка все та же:

Error: listen EACCES 
    at errnoException (net.js:905:11) 
    at Server._listen2 (net.js:1024:19) 
    at listen (net.js:1065:10) 
    at Server.listen (net.js:1139:5) 
    at Server.server.listen (/var/lib/openshift/56fc344f2d5271249e0000fe/app-root/runtime/repo/node_modules/sesh/lib/core.js:56:12) 
    at Object.<anonymous> (/var/lib/openshift/56fc344f2d5271249e0000fe/app-root/runtime/repo/server.js:18:15) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
DEBUG: Program node server.js exited with code 8 
DEBUG: Starting child process with 'node server.js' 

Я из идей. Цените любую помощь. Спасибо, с наилучшими пожеланиями.

ответ

1

Ну, я не смог найти точную проблему, но смог локализовать ее.

Так начальная структура приложения не был:

  • не выражает
  • http.Server (слушать)
  • ws.server (слушать)
  • статического сервера файлов (слушать)
  • Сеша (сессии)

Все это прекрасно работает локально.

Для OpenShift Deploy, я должен был сделать эти изменения, чтобы начать работать нормально:

  • установлен экспресс
  • используя только один послушай
  • somewhy модуль Сеш не работает для меня, я ве переключился на «экспресс-сеанс»

окончательный код выглядит следующим образом (надеюсь кто-то найдет это полезным):

'use strict'; 

var http = require('http'), 
    express = require('express'), 
    app = express() 


var router = require('./modules/router') 
var session = require('express-session') 

app.use(session({ 
    secret: 'two keyboard cats', 
    resave: false, 
    saveUninitialized: true, 
    cookie: { secure: true } 
})); 

app.use(router) 

app.use(express.static('public')) 

var port = process.env.OPENSHIFT_NODEJS_PORT || 8080, 
    server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' 

var server = http.createServer(app) 
server.listen(port, server_ip_address, function() { 
    console.log("listening to the server") 
}) 

И модуль маршрутизатора это как:

'use strict'; 
var router = require('express').Router(); 

router.get('/', function(req, res) { 
    console.log(req.session.id) 
    res.writeHead(302, { 'Location': '/index.html' }) 
    res.end() 
}) 


module.exports = router 

И совет для «нубов», как я: обратить внимание на порядок промежуточное программное. Сеансы должны проходить до маршрутизатора.

Смежные вопросы