【问题标题】:Heroku - "No web processes running" message, but server already startedHeroku - “没有网络进程正在运行”消息,但服务器已经启动
【发布时间】:2021-03-18 07:22:40
【问题描述】:

我在 Heroku 和我的 Node / Express / MongoDB 应用程序中遇到以下问题:

XXXX-05-10T22:56:41.782988+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=fast-depths-03410.herokuapp.com request_id=d42d214e-051d-4ba9-842f-ad98cedaf4ab fwd="xxx.xxx.xxx.xxx" dyno= connect= service= status=503 bytes= protocol=https

我在很多帖子中看到这个错误与dyno scale有关,但我认为不是这样。

正如您在以下日志中看到的,应用程序正在运行:

XXXX-05-10T22:41:56.098412+00:00 app[api.1]: yarn run v1.22.5
XXXX-05-10T22:41:56.253837+00:00 app[api.1]: $ node index.js
XXXX-05-10T22:41:57.849610+00:00 app[api.1]: server started on port 23804 (development)

但是当我尝试访问我的 Heroku 应用程序时:https://fast-depths-03410.herokuapp.com/ 我唯一能看到的是消息

应用程序错误检查日志..."

关于我的应用,我尝试了以下方法:

  • 我已经用heroku ps:scale {myapp-name}=1 缩放了测功机
  • 我已将侦听端口更改为使用process.env.PORT
  • 我在我的Dockerfile 中添加了EXPOSE $PORT

问题是什么,我该如何解决?

【问题讨论】:

    标签: node.js mongodb docker heroku mongoose


    【解决方案1】:

    你有 something 正在运行,但它不是 web 进程。您的日志显示了一个api 进程:

    XXXX-05-10T22:41:57.849610+00:00 app[api.1]: server started on port 23804 (development)
                                         ^^^
    

    对于非 Docker 部署,进程类型由您的 Procfileonly web processes can receive traffic from the internet 定义。在这种情况下,将您的 Procfile

    api: some command
    

    web: some command
    

    并重新部署。

    如果您使用的是 Docker,请确保在发布时use web for your process-type when you build and push your image 及以后,例如:

    heroku container:push web
    heroku container:release web
    

    【讨论】:

    • 嗨,克里斯,我没有使用 Procfile,因为它不是严格需要的,关于 heroku 文档:devcenter.heroku.com/changelog-items/370 我会尝试更改 heroku 的 [image|slug] 如果可以解决问题,你可以在那里看到的 api 进程,是我推送到 heroku 时使用的 [image|slug] 的名称
    • 是的,好主意。无论哪种方式,您都需要将其作为 web 进程。
    • 太棒了!我已经更改了 [image|slug] 名称并且它起作用了 :) 让我问一下,这是因为我使用的是免费套餐吗?当我使用付费计划时,我可以根据需要指定测功机的名称吗?
    • 太棒了!我刚刚更新了我的答案以包括 Docker 的东西。不,这与免费或付费等级无关。 Heroku 的进程模型指定了两种“特殊”进程类型:[web 进程必须绑定到 PORT 并且它们可以接收来自互联网的流量](heroku 容器:push ) 和 release 进程在您的应用程序的发布阶段。如果你想处理 HTTP / HTTPS 请求,你必须使用web 进程。
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 2013-04-07
    • 2019-04-01
    • 2017-01-21
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多