当前位置:首页 > 文章列表 > Golang > Go问答 > 在heroku上部署一个golang应用程序,构建成功但应用程序错误

在heroku上部署一个golang应用程序,构建成功但应用程序错误

来源:Golang技术栈 2023-03-28 18:13:32 0浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《在heroku上部署一个golang应用程序,构建成功但应用程序错误》,这篇文章主要会讲到golang等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我的 golang 应用程序在本地主机的 9000 端口上运行。在使用 godep 支持在 heroku 上部署它之后,我能够在 heroku 上推送和部署。但是,当我尝试访问端点(例如“/”)时,它会显示应用程序错误。在 heroku 部署时,您可以在下面看到我的代码和日志

package main

import (
    "log"
    "fmt"
    "net/http"
    "os"

    "github.com/gorilla/mux"
    "github.com/gorilla/context"

    "gopkg.in/paytm/grace.v1"

    // utilhttp "bitbucket.org/michaelchandrag/chit/pkg/util/http"
    // util "bitbucket.org/michalechandrag/chit/pkg/util"
)

func main() {
    log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
    log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")

    muxRouter := mux.NewRouter()

    muxRouter.HandleFunc("/", Articles)
    http.Handle("/", muxRouter)

    // err = grace.Serve(":"+cfg.Server.Port, context.ClearHandler(http.DefaultServeMux))
    err := grace.Serve(":9000", context.ClearHandler(http.DefaultServeMux))
    if err != nil {
        log.Println("[ERROR GRACEFUL]", err)
        os.Exit(1)
    }

    os.Exit(0)
}

func Articles(w http.ResponseWriter, r *http.Request) {
    // vars := mux.Vars(r)
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, "Hello")
    // r.Close = true
    // w.Header().Set("Content-Type", "application/json")
    // w.Header().Set("Access-Control-Allow-Origin", "*")

    /*if r.Method == "OPTIONS" {
        w.WriteHeader(http.StatusOK)
        return
    }

    if err := fn(w, r); err != nil {
        log.Println(err)
        apiObject := ConstructAPIError(http.StatusInternalServerError, ErrGeneral, SysMsgErrGeneral, MsgErrGeneral)
        SendAPIObject(w, apiObject)
        return
    }*/
}

部署时的heroku日志

-----> Go app detected
-----> Fetching jq... done
-----> Fetching stdlib.sh.v8... done
-----> Checking Godeps/Godeps.json file.
-----> New Go Version, clearing old cache
-----> Installing go1.12.6
-----> Fetching go1.12.6.linux-amd64.tar.gz... done
-----> Running: go install -v -tags heroku ./... 
bitbucket.org/michaelchandrag/chit/pkg
bitbucket.org/michaelchandrag/chit/vendor/github.com/gorilla/context
bitbucket.org/michaelchandrag/chit/vendor/github.com/gorilla/mux
bitbucket.org/michaelchandrag/chit/vendor/gopkg.in/tylerb/graceful.v1
bitbucket.org/michaelchandrag/chit/vendor/gopkg.in/paytm/grace.v1
bitbucket.org/michaelchandrag/chit/pkg/util
bitbucket.org/michaelchandrag/chit

       Installed the following binaries:
            ./bin/chit
-----> Discovering process types
       Procfile declares types -> web
-----> Compressing...
       Done: 7.5M
-----> Launching...
       Released v3
       https://michaelchandrag-project.herokuapp.com/ deployed to Heroku

访问端点前后的应用日志

2:47.954106+00:00 heroku[web.1]: Starting process with command `chit`
2019-07-08T05:02:49.413453+00:00 app[web.1]: 2019/07/08 05:02:49 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2019-07-08T05:02:49.413476+00:00 app[web.1]: 2019/07/08 05:02:49 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2019-07-08T05:02:49.413647+00:00 app[web.1]: 2019/07/08 05:02:49 starting serve on  :9000
2019-07-08T05:03:48.131507+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-07-08T05:03:48.131595+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-07-08T05:03:48.214979+00:00 heroku[web.1]: State changed from starting to crashed
2019-07-08T05:03:48.193205+00:00 heroku[web.1]: Process exited with status 137
2019-07-08T10:38:59.721224+00:00 heroku[web.1]: State changed from crashed to starting
2019-07-08T10:39:00.359017+00:00 heroku[web.1]: Starting process with command `chit`
2019-07-08T10:39:02.232435+00:00 app[web.1]: 2019/07/08 10:39:02 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2019-07-08T10:39:02.232458+00:00 app[web.1]: 2019/07/08 10:39:02 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2019-07-08T10:39:02.232583+00:00 app[web.1]: 2019/07/08 10:39:02 starting serve on  :9000
2019-07-08T10:40:00.462841+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-07-08T10:40:00.462974+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-07-08T10:40:00.555959+00:00 heroku[web.1]: Process exited with status 137
2019-07-08T10:40:00.573427+00:00 heroku[web.1]: State changed from starting to crashed
2019-07-08T13:33:25.021835+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=michaelchandrag-project.herokuapp.com request_id=e6b5c93a-7177-4080-9858-ed925a20c513 fwd="36.74.35.162" dyno= connect= service= status=503 bytes= protocol=https
2019-07-08T13:33:25.566036+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=michaelchandrag-project.herokuapp.com request_id=35c741a9-be4d-48f6-ba99-ba24ddc58b9b fwd="36.74.35.162" dyno= connect= service= status=503 bytes= protocol=https
2019-07-08T13:48:38.294082+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=michaelchandrag-project.herokuapp.com request_id=57a3a243-58f4-4efe-b478-eb660d84fe1f fwd="36.74.35.162" dyno= connect= service= status=503 bytes= protocol=https
2019-07-08T13:48:38.616077+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=michaelchandrag-project.herokuapp.com request_id=0687b8a8-86ae-4c49-a37f-9cbf9e0f75de fwd="36.74.35.162" dyno= connect= service= status=503 bytes= protocol=https

正确答案

您的应用程序启动但被杀死,因为您没有将您的网络服务器绑定到指定的端口。从日志消息中可以清楚地看出这一点:

2019-07-08T05:03:48.131507+00:00 heroku[web.1]:错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

在 Heroku 上,您必须将 HTTP 服务器绑定到PORT环境变量指定的端口。在 Heroku 网关的帮助下,您的应用程序将在默认 HTTP 和 HTTPS 端口上公开可用。

因此,在预期的端口上启动您的服务器。而不是这个:

err := grace.Serve(":9000", context.ClearHandler(http.DefaultServeMux))

做这个:

port := os.Getenv("PORT")
if port == "" {
    port = "9000" // Default port if not specified
}
err := grace.Serve(":" + port, context.ClearHandler(http.DefaultServeMux))

终于介绍完啦!小伙伴们,这篇关于《在heroku上部署一个golang应用程序,构建成功但应用程序错误》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

版本声明
本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
如何将日期转换为不同的格式?如何将日期转换为不同的格式?
上一篇
如何将日期转换为不同的格式?
是否有任何标准库可以将 float64 转换为具有最大有效位数的固定宽度的字符串?
下一篇
是否有任何标准库可以将 float64 转换为具有最大有效位数的固定宽度的字符串?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    499次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 社媒分析AI:数说Social Research,用AI读懂社媒,驱动增长
    数说Social Research-社媒分析AI Agent
    数说Social Research是数说故事旗下社媒智能研究平台,依托AI Social Power,提供全域社媒数据采集、垂直大模型分析及行业场景化应用,助力品牌实现“数据-洞察-决策”全链路支持。
    14次使用
  • 先见AI:企业级商业智能平台,数据驱动科学决策
    先见AI
    先见AI,北京先智先行旗下企业级商业智能平台,依托先知大模型,构建全链路智能分析体系,助力政企客户实现数据驱动的科学决策。
    14次使用
  • 职优简历:AI驱动的免费在线简历制作平台,提升求职成功率
    职优简历
    职优简历是一款AI辅助的在线简历制作平台,聚焦求职场景,提供免费、易用、专业的简历制作服务。通过Markdown技术和AI功能,帮助求职者高效制作专业简历,提升求职竞争力。支持多格式导出,满足不同场景需求。
    12次使用
  • 一键证照:AI智能证件照在线制作,快速生成合格证件照
    一键证照
    告别传统影楼!一键证照,AI智能在线制作证件照,覆盖证件照、签证照等多种规格,免费美颜,快速生成符合标准的专业证件照,满足学生、职场人、出境人群的证件照需求。
    10次使用
  • 幂简AI提示词商城:专业AI提示词模板交易与效能优化平台
    幂简AI提示词商城
    幂简AI提示词商城是国内领先的专业级AI提示词模板交易平台,致力于降低优质提示词创作门槛,提升AI助手使用效率。提供3K+多领域专业提示词模板,支持变量替换、跨AI模型适配、API集成,解决提示词复用性低、效果不稳定、创作耗时等痛点。
    11次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码