2015-06-11 3 views
4

У меня очень простое прямое приложение node.js [1] Я хочу развернуть на heroku. Хотя я могу развернуть его, доступ к странице невозможен в браузере.Развернуть приложение node.js на heroku успешно, но не работает

Я следовал советам руководства «Приступая к работе с Node.js на Heroku» [2]. Когда я запускаю приложение с использованием node index.js локально, я могу получить доступ к приложению по адресу http://localhost:8080/index.jade, однако, когда я пытаюсь получить к нему доступ по адресу heroku по адресу http://immonow.herokuapp.com:8080/index.jade, он бы выбросил мне код ошибки HTTP ERR_CONNECTION_REFUSED.

Как развернуть мое приложение:

  1. git commit -am "made changes" // фиксирует изменениям
  2. git push origin master // нажать мерзавец
  3. heroku create // создать Heroku приложение
  4. git push heroku master // толчок Heroku
  5. heroku ps:scale web=1 // начало работы

Мой node.js сервер:

#!/usr/bin/env node 
var http = require('http') 
    , jade = require('jade') 
    , static = require('node-static') 
    , jadeRe = /\.jade$/ 
    , path = process.argv.slice(2)[0] 
    , fileServer = new static.Server(path || '.') 

http.createServer(function (req, res) { 
    if (req.url.match(jadeRe)) { 
    res.writeHead(200, {'Content-Type': 'text/html'}) 
    res.end(jade.renderFile('.' + req.url, { 
     filename: '.' + req.url.replace(jadeRe, '') 
    })) 
    } else { 
    req.addListener('end', function() { 
     fileServer.serve(req, res) 
    }).resume() 
    } 
}).listen(8080) 

Любая помощь будет оценена.

[1] https://github.com/takahser/immonow

[2] https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction

+0

Из командной строки, в которой вы работаете с Heroku проверить, если 'Heroku работает open'. Таким образом, вы можете быть уверены, что ваше приложение живет там, где вы думаете. (Кажется странным, что вам нужно указать порт 8080 для экземпляра производства?) – lostphilosopher

+0

'heroku open' открывает https://immonow.herokuapp.com, однако я попытался изменить порт на 80, но тогда он не будет даже работать локально – Ronin

+0

Рад, что вы получили его! – lostphilosopher

ответ

2

Поскольку я не смог заставить его работать, используя пакет HTTP, я решил использовать вместо выражения. Что касается порта, я должен был сделать это следующим образом:

var port = process.env.PORT || 3000; 
app.listen(port); 

, чтобы заставить его работать [1].

Вот мой полный рабочий сервер:

/** 
* Module dependencies. 
*/ 
var express = require('express'); 

// Path to our public directory 
var pub = __dirname + '/public'; 

// setup middleware 
var app = express(); 
app.use(express.static(pub)); 
app.use("/css", express.static(__dirname + '/css')); 
app.use("/font", express.static(__dirname + '/font')); 
app.use("/img", express.static(__dirname + '/img')); 
app.use("/js", express.static(__dirname + '/js')); 
app.use("/video", express.static(__dirname + '/video')); 

// Set our default template engine to "jade" 
// which prevents the need for extensions 
// (although you can still mix and match) 
app.set('view engine', 'jade'); 

app.get('/', function(req, res){ 
    res.render('index'); 
}); 

app.get('/*', function(req, res){ 
    console.log(req.url.replace("/","")); 
    res.render(req.url.replace("/","")); 
}); 

// change this to a better error handler in your code 
// sending stacktrace to users in production is not good 
app.use(function(err, req, res, next) { 
    res.send(err.stack); 
}); 

/* istanbul ignore next */ 
if (!module.parent) { 
    var port = process.env.PORT || 3000; 
    app.listen(port); 
    console.log('Express started on port 3000'); 
} 

[1] см: Node.js port issue on Heroku cedar stack

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