【问题标题】:Google App Engine:Api Page not found after deploymentGoogle App Engine:部署后找不到 Api 页面
【发布时间】:2021-12-30 12:04:18
【问题描述】:

使用 Golang,我编写了这个基本服务器:

func main() {

    router := gin.Default()
    router.GET("/api", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"data": "hello world"})
    })

    router.LoadHTMLGlob("www/*.html")
    router.GET("/", func(c *gin.Context) {
        c.HTML(http.StatusOK, "index.html", nil)
    })

    fmt.Println("listening on localhost:8080")

    router.Run("localhost:8080")

}

它在本地主机上运行良好。

使用sudo gcloud app deploy 部署后,我浏览到主页的托管 url 路由,静态文件可以正常工作,但是当我浏览到/api 路由时,它会抛出Page not found 错误(在本地工作)

这是用于部署到 App Engine 的 app.yaml

runtime: go116

handlers:
- url: /
  static_files: www/index.html
  upload: www/index.html

- url: /(.*)
  static_files: www/\1
  upload: www/(.*)

我尝试过的:

我在这里做错了什么?

注意:我在 localhost 上运行的 Go 版本是 1.17 但App Engine supports up to version 1.15

【问题讨论】:

  • 这是你完整的 YAML 文件吗?根据the docs,YAML 不应该正确部署。另外,你为什么只使用静态处理程序?如果您只提供静态文件,则应该只使用 Cloud Storage。
  • 我可以成功提供静态资源,问题出在api
  • 如果我的answer 对您有所帮助,您可以单击对勾图标将其标记为已接受。这可以帮助遇到同样问题的未来用户。

标签: go google-app-engine google-cloud-platform


【解决方案1】:

根据我所做的测试,我建议在app.yaml 中使用scripts 处理程序元素,如documentation 中所述,如下所示:

runtime: go115

handlers:
- url: /(.*)
  script: auto

这样,您的 Go 路由器将为您的所有流量提供服务,如 documentation 所述:

脚本元素唯一可接受的值是 auto,因为所有流量都是使用 entrypoint 命令提供的。

另外,我建议您将代码中的最后一行更改为:

router.Run()

正如 GitHub 上的 issue 所指出的:

... 无参数:router.Run()
在此 API 下,gin 会尝试读取 PORT 环境变量并使用它。
如果PORT变量没有定义,默认使用“:8080”。

这个建议是在检查了我所做的测试部署的日志后提出的:

应用正在侦听 8080 端口。我们建议您的应用在 PORT 环境变量定义的端口上侦听,以利用端口 8080 上的 NGINX 层

为了进一步调试您的应用程序,我建议您查看Viewing logs 文档。

【讨论】:

  • 感谢回复!!我会在几个小时内测试
  • 您有机会测试app.yaml 中的更改吗?
  • 抱歉,我正忙于一个工作项目,我明天要测试
猜你喜欢
  • 2011-03-20
  • 2015-02-19
  • 1970-01-01
  • 2019-01-30
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2017-09-29
相关资源
最近更新 更多