登录
首页 >  Golang >  Go问答

解决 Heroku 上 go 应用程序中的“at=error code=H10 desc="App crashed"”错误

来源:stackoverflow

时间:2024-03-15 18:00:30 171浏览 收藏

在 Heroku 上部署 Go 应用程序时,开发人员可能会遇到“at=error code=H10 desc="App crashed"”错误。此错误表明 Web 进程在启动后 60 秒内无法绑定到指定端口。通过使用 os.lookupenv() 函数而不是 os.Getenv() 函数来检查端口号是否存在,可以解决此问题。如果端口号不存在,则将其设置为默认值(例如“8080”),从而确保 Web 进程能够成功绑定到端口并启动应用程序。

问题内容

我正在设置一个 go 应用程序并使用 heroku 进行部署。该应用程序在本地主机、127.0.0.1 和 0.0.0.0 上运行良好。

我遇到了一个端口错误,我通过设置它解决了这个错误,如果heroku没有给我一个端口,我将其设置为8080。

func main () {
    port := os.getenv("port")
    if port == "" {
        port = "8080"
    }

    http.handlefunc("/conservation/v1/", defaulthandler)
    http.handlefunc("/conservation/v1/country/" , countryhandler)
    http.handlefunc("/conservation/v1/species/", specieshandler)
    http.handlefunc("/conservation/v1/diag/", diaghandler)

    log.fatal(http.listenandserve(":" + port, nil))
}

它应该可以工作,我发现的所有说它应该可以工作的东西都没有帮助。例如,当我尝试使用 diag 函数时,我得到

at=error code=h10 desc="app crashed" method=get path="/conservation/v1/diag" host=morning-temple-66987.herokuapp.com request_id=716af414-653a-4988-851e-f85d1a6ddb19 fwd="129.241.229.16" dyno= connect= service= status=503 bytes= protocol=https

作为完整的错误读数。使用 /county 或 /species 会给出几乎相同的错误消息,只是路径不同

我已将范围缩小到错误代码 r10

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

现在的问题是,如何修复错误代码 r10?

不知怎的,用核武器摧毁这个项目并制作一个新的项目是有效的。我认为这可能是 procfile 或 go.mod 文件中的错误,类似的内容。

我删除了所有文件并制作了一个新应用程序。重写了 procfile 并重新制作了 go.mod。我保留了 main.go 文件,它就正常工作了


解决方案


os.getenv 不一定返回“”。因此,请改用 os.lookupenv,例如。

使用

    port, exists := os.lookupenv("port")
    if !exists {
        port = "8080"
    }

而不是

    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }

好了,本文到此结束,带大家了解了《解决 Heroku 上 go 应用程序中的“at=error code=H10 desc="App crashed"”错误》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>