node.js - 将第一个应用程序部署到 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)
})
解决方案
我在部署到 Heroku 时运行了本地开发服务器。停止开发服务器后尝试重新部署,它工作。本地服务器在部署中干扰了环境变量。
推荐阅读
- php - 使用 PHP 将用户输入发送到 MySql 时,如何将用户输入附加到电子邮件地址(域部分)?
- python - 如何在分层模型中获得注意力权重
- node.js - 在 node.js 的不同端口上运行多个 http 服务器
- gps - HEX 到 ASCII 到 HEX 转换:不可读的字符
- python - python模块安装错误。要求Visual C++ 14.0
- python - 当主进程因未处理的异常结束时退出子进程
- javascript - Npm 脚本总是给出错误,因为“不被识别为内部或外部命令”
- java - Android Studio java模块依赖于本地目录
- unit-testing - 使用 xUnit 和 Moq 对 ASP.Net Core Web API 进行单元测试
- java - Quartz 调度程序 Tirgger 作业手动从 JAVA 中的另一个 Web 应用程序