我无法将角度种子应用程序(https://github.com/angular/angular-seed)部署到Heroku。我相信问题是当heroku需要通过process.env.PORT变量动态分配端口时,端口号被硬编码到服务器启动脚本中。查看heroku日志确认:Starting up http-server, serving ./ on port: 8000
。我的Procfile包含web: npm start
,我的package.json文件包含
"scripts": {
"prestart": "npm install",
"start": "http-server -a localhost -p 8000"
}
如何更改它以便我的服务器仍能在foreman start
的本地开发环境中正常运行,但是在使用heroku时动态分配端口?我想要它,以便当我在本地开发环境中键入foreman start
时,将在localhost:8000创建一个服务器,但是当我将应用程序部署到heroku时,Heroku将选择该端口。
答案 0 :(得分:5)
我不是Node开发人员,但为什么不在start
脚本中使用Heroku配置的PORT编号?
即。 "start": "http-server -a localhost -p $PORT"
然后它将在Heroku上运行。如果您在本地运行,只需export PORT=8000
,或者PORT=8000
如果您使用.env
运行foreman
,那么您就可以了。
如果通过将$PORT
替换为${PORT-8000}
来设置PORT,您也可以添加bash magic来设置PORT。
(未测试的)
答案 1 :(得分:3)
遇到同样的问题。到目前为止,在快递的帮助下解决了它。
添加了Procfile:
web: node web.js
添加了web.js
var port = Number(process.env.PORT || 8000);
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/app'));
var server = app.listen(port, function() {
console.log('Listening on port %d', server.address().port);
});
在package.json
"express": "3.x"
替换
"start": "http-server -a localhost -p 8000"
带
"start": "node web.js"
然后提交,运行git push heroku master
,然后完成heroku open
答案 2 :(得分:2)
如果您希望在没有明确的情况下解决问题,只使用节点http-server
模块,请在package.json
中找到您需要的内容:
{
"dependencies": {
"http-server": "*"
},
"scripts": {
"start": "http-server ./ -p ${PORT:=5000} -c-1"
}
}
<强>解释强>
http-server
(不应该在dev依赖项中)-p ${PORT:=8000}
将服务器绑定到可用于heroku实例的端口,该端口可在环境变量中找到。如果该名称不存在environement变量(例如,本地),则默认为8000
-a localhost