我构建了小型 go 应用程序,我使用以下命令在本地运行它
// +build !appengine
package main
import (
"fmt"
"net/http"
"github.com/Test/test/server"
)
func main() {
r := server.Router()
fmt.Println("Started Server")
http.ListenAndServe("localhost:8182", r)
}
我之前将它部署到了 Google AppEngine,但上面的方法不起作用,所以我为 Google AppEngine 创建了这个:
// +build appengine
package main
import (
"net/http"
"github.com/Test/test/server"
"google.golang.org/appengine"
)
func init() {
r := server.Router()
appengine.Main()
http.Handle("/", r)
}
我使用以下内容app.yaml
handlers:
- url: /.*
script: _go_app
secure: always
redirect_http_response_code: 301
该应用程序部署良好,谷歌云控制台说它正在运行,但我得到的只是“404 页面未找到”,这不是我构建的任何处理程序。AppEngine 没有报错,我在日志中只看到 404,在日志中深入挖掘我发现有些东西提到了 go app: urlMapEntry: "_go_app"
。
我正在使用 go-chi 路由器:
func Router() *chi.Mux {
r := chi.NewRouter()
// home
r.Get("/", handlers.RootHandler)
// api
r.Route("/api", func(r chi.Router) {
r.Get("/*", handlers.NotSupportedAPIHandler)
})
r.Get("/*", handlers.RootHandler)
})
return r
}
但无论我输入哪个 url,我都看不到它RootHandler
正在被使用,因为它会返回一个 HTML 文件。当我尝试访问 /api 时,我也看不到NotSupportedAPIHandler
它被拾起,因为这将返回带有 JSON 响应的状态 404。
奇怪的是,不久前代码工作了,我得到了 HTML 文件,使用 go_app,使用 go-chi 路由器。现在,我得到的只是找不到 404 页面。
该应用程序在本地运行良好。
我该如何调试呢?有没有什么地方我可以看到出了什么问题,或者如何app.yaml
以一种认为有必要返回 404 的方式路由它。来自我的 go_app 的任何响应看起来都与我现在得到的不同,所以这就是为什么我认为失败更早,在app.yaml
.