在heroku上部署node.js应用程序成功但不起作用

时间:2015-06-11 17:24:29

标签: node.js git heroku

我有一个非常简单,直接的node.js app [1]我想在heroku上部署。虽然我能够部署它,但无法在浏览器中访问该页面。

我遵循了“Heroku上的Node.js入门”指南[2]中的建议。当我在本地使用node index.js运行应用程序时,我可以在http://localhost:8080/index.jade访问应用程序,但是,当我尝试在http://immonow.herokuapp.com:8080/index.jade的heroku上访问它时,它会给我一个{ {1}} HTTP错误代码。

我如何部署我的应用:

  1. ERR_CONNECTION_REFUSED //提交更改
  2. git commit -am "made changes" //推送到git
  3. git push origin master //创建heroku app
  4. heroku create //推送到heroku
  5. git push heroku master //启动工作人员
  6. 我的node.js服务器:

    heroku ps:scale web=1

    任何帮助都将不胜感激。

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

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

2 个答案:

答案 0 :(得分:2)

由于我无法使用http包让它工作,我决定使用express代替。至于港口,我必须按照以下方式进行操作

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

答案 1 :(得分:1)

我必须做的事情......

  1. 在根目录中创建一个Procfile(文件名为Procfile,无扩展名) 在Procfile内,输入:

    web: node server.js

  2. 将一个脚本和引擎添加到package.json

    "scripts": { "start": "node server.js" }

    "engines": { "node": "8.9.3" }

  3. 更新server.js中的端口

    var port = process.env.PORT || 8080;

  4. 为什么......

    1. 显式声明应该执行哪个命令来启动您的应用。 Heroku查找指定过程类型的Procfile

    2. 对于脚本,如果在构建过程中根目录中没有Procfile,则将通过运行npm start启动Web进程。对于引擎,指定与您正在开发的运行时匹配的Node版本,并希望在Heroku上使用。

    3. Heroku已经为您的应用分配了一个端口并将其添加到env,因此您无法将端口设置为固定数字。

    4. 资源:

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

      https://devcenter.heroku.com/articles/troubleshooting-node-deploys

      https://devcenter.heroku.com/articles/deploying-nodejs