代码之家  ›  专栏  ›  技术社区  ›  Will

将第一个应用部署到Heroku:错误R10(启动超时)->Web进程在启动后60秒内绑定到$PORT失败

  •  0
  • Will  · 技术社区  · 6 年前

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

    它因503错误而失败。日志说明如下:

    错误R10(启动超时)->Web进程无法绑定到内的$PORT 发射60秒

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

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

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

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

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

    我所理解的关键部分可能是误解:

    有了Heroku,您需要在新服务器上设置环境变量 创建Heroku应用程序,以便在项目启动时知道要使用哪些值 部署。你可以通过两种方式实现这一点,要么在Heroku的网站上在线, 或者使用heroku CLI通过命令行。既然我们不是 创建新的Heroku远程存储库,所有环境变量 需要使用Heroku.com添加。

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

    enter image description here

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

    heroku config:set process.env.PORT=8000
    

    但会出现以下错误:

    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)
    })
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Will    6 年前

    在部署到Heroku时,我让本地开发服务器运行。在停止dev服务器后尝试重新部署,结果成功了。本地服务器干扰了部署中的环境变量。