将简单的 golang 应用程序部署到 AppEngine 已停止工作



我在golang创建了一个小型测试应用程序,并尝试将其部署到Google AppEngine,尽管" gcloud应用程序部署"命令似乎有效并且没有报告任何错误,但是当我访问端点时 -> https://XXX.appspot.com/cards 它只是坐在那里,最终给了我一个500的响应,并显示错误(在浏览器中(

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

我是相当新的golang和AppEngine,但我最近制作了几个工作应用程序,我完全不知道为什么它不起作用。

当我输入"gcloud 应用程序日志尾部 -s 默认值"时,我看到一些日志条目,例如:

2019-09-06 02:17:31 default[20190905t204717]  "GET / HTTP/1.1" 500
2019-09-06 02:17:32 default[20190905t204717]  Starting the application...
2019-09-06 02:22:08 default[20190905t212008]  "GET / HTTP/1.1" 500
2019-09-06 02:22:08 default[20190905t212008]  Starting the application...
2019-09-06 02:22:14 default[20190905t212008]  "GET /cards HTTP/1.1" 500
2019-09-06 02:22:17 default[20190905t212008]  "GET /cards HTTP/1.1" 500
2019-09-06 02:22:17 default[20190905t212008]  Starting the application...

这是简单的单文件go应用程序"main.go">

package main
import (
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func main() {
fmt.Println("Starting the application...")
router := mux.NewRouter()
router.HandleFunc("/cards", GetCardsEndpoint).Methods("GET")
err := http.ListenAndServe(":80", router)
fmt.Println("ERR:", err)
}
func GetCardsEndpoint(response http.ResponseWriter, request *http.Request) {
fmt.Println("API: GetCardsEndpoint() ")
err := json.NewEncoder(response).Encode("cards api here")
fmt.Println("API: GetCardsEndpoint() err:", err )
}

应用程序.yaml

runtime: go111

它应该返回文本:"卡片 api 在这里">

我想通了,基本上,这里有两件事是错误的:

1(我需要在项目的根目录中键入"dep init"和"dep sure -update"。 (将所有依赖项下载到项目文件夹中,以便可以将它们与应用一起上传。

2(我认为我们不应该在我们的代码中指定一个端口,我们应该从操作系统中获取侦听端口。GetEnv("PORT( on a AppEngine Server

而不是:

err := http.ListenAndServe(":80", router)

它应该是

err := http.ListenAndServe(":"+os.getEnv("PORT"), router)

最新更新