Google App Engine:部署后找不到 Api 页面

Pri*_*mza 5 google-app-engine go google-cloud-platform

我使用 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")

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

runtime: go116

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

- url: /(.*)
  static_files: www/\1
  upload: www/(.*)
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我在这里做错了什么?

注意:我在 localhost 上运行的 Go 版本是 1.17,但App Engine 支持最高版本 1.15

Rog*_*ter 0

根据我所做的测试,我建议按照文档中的说明使用scripts处理程序元素,如下所示:app.yaml

runtime: go115

handlers:
- url: /(.*)
  script: auto
Run Code Online (Sandbox Code Playgroud)

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

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

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

router.Run()
Run Code Online (Sandbox Code Playgroud)

正如 GitHub 上这个问题所指出的:

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

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

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

为了在您的应用程序中进一步调试,我建议检查查看日志文档。