0

我构建了小型 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.

4

0 回答 0