为了账号安全,请及时绑定邮箱和手机立即绑定

从命令行部署时,gcp 云函数返回 404

从命令行部署时,gcp 云函数返回 404

Go
眼眸繁星 2022-11-08 15:34:55
如果我在控制台中部署示例 hello world ,则 url/trigger 有效。如果我从命令行部署,它看起来与云功能控制台中的代码/属性完全相同,但 url 是 404。我无法发现差异/问题。如果从命令行以这种方式部署,则部署的触发器/url 显示以下 hello world 示例的“404 page not found”。gcloud functions deploy hellogo --entry-point=HelloWorld --trigger-http --region=us-central1 --memory=128MB --runtime=go116 --allow-unauthenticated// Package p contains an HTTP Cloud Function.package pimport (    "encoding/json"    "fmt"    "html"    "io"    "log"    "net/http")// HelloWorld prints the JSON encoded "message" field in the body// of the request or "Hello, World!" if there isn't one.func HelloWorld(w http.ResponseWriter, r *http.Request) {    var d struct {        Message string `json:"message"`    }    if err := json.NewDecoder(r.Body).Decode(&d); err != nil {        switch err {        case io.EOF:            fmt.Fprint(w, "Hello World!")            return        default:            log.Printf("json.NewDecoder: %v", err)            http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)            return        }    }    if d.Message == "" {        fmt.Fprint(w, "Hello World!")        return    }    fmt.Fprint(w, html.EscapeString(d.Message))}
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

试图重现您的错误,但我无法复制。我使用了与您相同的命令,并且可以成功访问 url 或通过 HTTP 调用触发部署的 hello world 云功能。


gcloud functions deploy hellogo --entry-point=HelloWorld --trigger-http --region=us-central1 --memory=128MB --runtime=go116 --allow-unauthenticated


成功卷曲的输出:

//img1.sycdn.imooc.com//636a06e000017da819000169.jpg

我建议您根据此 GCP文档检查您尝试访问的网址:

如果您尝试调用不存在的函数,Cloud Functions 会使用 HTTP/2 302 重定向进行响应,该重定向会将您带到 Google 帐户登录页面。这是不正确的。它应该以 HTTP/2 404 错误响应代码进行响应。问题正在得到解决。

解决方案

确保正确指定函数的名称。您始终可以使用 gcloud 函数调用进行检查,该函数调用会为缺少的函数返回正确的 404 错误。

您还可以参考此完整指南,以使用 Go 运行时快速启动 CF 创建和部署。


查看完整回答
反对 回复 2022-11-08
?
波斯汪

TA贡献1811条经验 获得超4个赞

我陷入困境的项目中的代码不仅仅是这个函数。在尝试在更大的项目中部署单个函数/文件后,我走上了这条路。如果我简化为仅包含 a 的文件夹,hello.go并且go.mod确实可以:-/ 从命令行部署它:


gcloud functions deploy hellogo --entry-point=HelloWorld --trigger-http --region=us-central1 --memory=128MB --runtime=go116 --allow-unauthenticated


// go.mod


module github.com/nickfoden/hello


go 1.16

感谢您的快速回复和帮助。而不是尝试在现有项目中创建具有更大 go.sum、多个文件夹、现有服务器/api 等的单个函数。我将从这里开始,拥有一个具有云功能的单个文件并在其之上构建并查看什么点/如果我再次卡住。



查看完整回答
反对 回复 2022-11-08
  • 2 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信