首页 > 解决方案 > 将第一个应用程序部署到 Heroku:错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

问题描述

我正在尝试第一次将 Express/React/Mongo 应用程序部署到 Heroku。

它因 503 错误而失败。日志指出以下内容:

错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT

我在根 index.js 文件中设置了以下端口变量:

const port = process.env.PORT || 3000;

并在这里使用它:

app.listen(port, function(){
    console.log("Express server is running on port " + port)
}) 

它输出“Express 服务器正在端口 3000 上运行”,这表明它没有获取环境变量。

我一直在尝试按照此处的说明进行操作:https ://coursework.vschool.io/deploying-mern-with-heroku/

我可能误解的关键部分:

使用 Heroku,您需要在新创建的 Heroku 应用程序上设置环境变量,以便它知道在部署项目时要使用哪些值。您可以通过两种方式完成此操作,或者在 Heroku 的网站上在线,或者通过使用 heroku CLI 的命令行。由于我们没有创建新的 Heroku 远程存储库,因此需要使用 Heroku.com 添加所有环境变量。

我认为这意味着我应该设置一个环境变量 Heroku.com,我相信我已经这样做了:

在此处输入图像描述

我不能理解什么?

编辑:我尝试从 Heroku CLI 设置 theprocess.env.PORT=8000 :

heroku config:set process.env.PORT=8000

但是得到以下错误:

» 错误:缺少必需的标志: » -a, --app 运行命令的应用程序 » 使用 --help 查看更多帮助

这是完整的 index.js:

const express = require('express'),
    cors = require('cors'),
    app = express(),
    port = process.env.PORT || 3000;
    bodyParser = require('body-parser'),
    todoRoutes = require('./routes/todo'),
    path = require("path");


app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cors());
app.use(express.static(path.join(__dirname, "client", "build")))

app.get('/', function (req, res){
    res.send('Root route')
})

app.use('/api/todos', todoRoutes);

app.get("*", (req, res) => {
    res.sendFile(path.join(__dirname, "client", "build", "index.html"));
});

app.listen(port, function(){
    console.log("Express server is running on port " + port)
})

标签: node.jsreactjsexpressheroku

解决方案


我在部署到 Heroku 时运行了本地开发服务器。停止开发服务器后尝试重新部署,它工作。本地服务器在部署中干扰了环境变量。


推荐阅读