404 на appengine работает go_app
Я создал небольшое приложение 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
Приложение разворачивается нормально, Google Cloud Console говорит, что оно запущено, но все, что я получаю, это "404 страница не найдена", что не относится ни к одному из созданных мной обработчиков. AppEngine не сообщает об ошибках, я вижу только 404 в журналах, копаясь глубже в журналах и обнаруживаю, что некоторые вещи упоминают приложение go: 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
поднимая его, так как это вернет статус 404 с ответом JSON.
Странно то, что некоторое время назад код работал, я получил файл HTML, используя go_app, используя роутер go-chi. Теперь все, что я получаю, это 404 страница не найдена.
Приложение работает нормально локально.
Как я могу отладить это? Есть ли место, где я могу увидеть, что идет не так или как app.yaml
направляет это таким образом, что считает необходимым вернуть 404. Любой ответ от моего go_app будет выглядеть иначе, чем то, что я получаю сейчас, поэтому я думаю, что ошибка произошла раньше, в app.yaml
,