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
根据我所做的测试,我建议按照文档中的说明使用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 层
为了在您的应用程序中进一步调试,我建议检查查看日志文档。
归档时间: |
|
查看次数: |
319 次 |
最近记录: |