Heroku cedar 堆栈上的 Node.js 端口问题

Posted

技术标签:

【中文标题】Heroku cedar 堆栈上的 Node.js 端口问题【英文标题】:Node.js port issue on Heroku cedar stack 【发布时间】:2011-11-22 03:35:31 【问题描述】:

我正在 Node.js 中运行一个基本的 Express 应用程序并尝试部署到 Heroku。该应用程序在本地运行良好,我相信我在 Heroku 上的设置进展顺利,直到启动服务器时出现以下错误:

2011-09-21T16:42:36+00:00 heroku[web.1]: State changed from created to starting
2011-09-21T16:42:39+00:00 app[web.1]: Express server listening on port 3000 in production mode
2011-09-21T16:42:40+00:00 heroku[web.1]: Error R11 (Bad bind) -> Process bound to port 3000, should be 12810 (see environment variable PORT)
2011-09-21T16:42:40+00:00 heroku[web.1]: Stopping process with SIGKILL
2011-09-21T16:42:40+00:00 heroku[web.1]: Process exited

这是目前我在 app.js 中的全部内容

app.listen(3000);

我也确实按照 Heroku 入门中提到的那样运行过这个。

$ heroku config:add NODE_ENV=production
Adding config vars:
NODE_ENV => production

我相信我只需要设置生产端口?谢谢。

【问题讨论】:

【参考方案1】:

您能否显示您调用listen 的整个代码部分?您应该检查进程环境变量 PORT,而不仅仅是将其硬编码为 3000。来自他们的docs:

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

【讨论】:

酷,我更新了帖子。我是否需要以某种方式切换到端口 12810 进行生产?谢谢 啊,好吧。尝试使用我上面显示的逻辑调用listen,看看它是否有效。 这行得通,但process.env.PORT 有什么作用?谁设置的? Heroku 会:他们在启动 web dyno 时注入配置变量,这是他们注入的变量之一。 我在环境变量中找不到 PORT 变量,需要在 Procfile -p 命令中提及。我该怎么做?

以上是关于Heroku cedar 堆栈上的 Node.js 端口问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku Cedar 堆栈上使用 .htaccess 重定向到 HTTPS

从 Heroku Bamboo 堆栈升级到 Cedar 堆栈

如何将heroku cedar-14堆栈应用程序升级到最新的heroku堆栈(即,升级到heroku 18)

Heroku cedar 堆栈中 rack-cache 与 Varnish 的缺点?

如何让一个简单的 php 应用程序从 heroku cedar 堆栈发送电子邮件?

Heroku cedar:响应时间比竹子慢?