Go gcloud应用程序部署显示:exec:“;“吉特”:在$PATH中找不到可执行文件

Go gcloud应用程序部署显示:exec:“;“吉特”:在$PATH中找不到可执行文件,go,google-app-engine,gcloud,Go,Google App Engine,Gcloud,我正在努力将一个简单的Go应用部署到Google app Engine灵活的环境中。(这是一个非常精简的大型应用程序版本。)当我运行gcloud app deploy--project=时,它会以一个错误终止,并在其输出中包含以下内容: ... Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/go1-builder@sha256:68b86e4c97438df4c9e36c55ad724079b453398a0a44

我正在努力将一个简单的Go应用部署到Google app Engine灵活的环境中。(这是一个非常精简的大型应用程序版本。)当我运行
gcloud app deploy--project=
时,它会以一个错误终止,并在其输出中包含以下内容:

...
Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/go1-builder@sha256:68b86e4c97438df4c9e36c55ad724079b453398a0a44c29748fb5685eef73895
Step #0: gcr.io/gcp-runtimes/go1-builder@sha256:68b86e4c97438df4c9e36c55ad724079b453398a0a44c29748fb5685eef73895
Step #0: go: github.com/go-stack/stack@v1.8.0: git init --bare in /workspace/_gopath/pkg/mod/cache/vcs/6963ea18be763686e7a9697733dd92bfcc0d45b687afce82da04992523d91cd1: exec: "git": executable file not found in $PATH
Step #0: go: github.com/inconshreveable/log15@v0.0.0-20200109203555-b30bc20e4fd1: git init --bare in /workspace/_gopath/pkg/mod/cache/vcs/fe2a07d0f4107d9daa39043733e909094a5b926cca44d0f7269e7a2185dbef15: exec: "git": executable file not found in $PATH
Step #0: go: github.com/mattn/go-colorable@v0.1.6: git init --bare in /workspace/_gopath/pkg/mod/cache/vcs/f7e99db597f4d2fe3e4509a9af308dace72a13292b505deb909cd0df29c1468a: exec: "git": executable file not found in $PATH
Step #0: go: error loading module requirements
Finished Step #0
如果我删除
go.mod
,它确实可以工作,但是(我认为)我需要
go.mod
在本地编译和测试它。如果我不导入外部软件包,它确实可以工作,但我当然需要在我的更大的应用程序中使用外部软件包。如果我选择标准环境,它确实可以工作,但我需要一个灵活的环境来安装我的大型应用程序

如何将此应用成功部署到灵活的环境中

我的本地Go是1.13,我有最新版本(292.0.0)的gcloud。除了
go.sum
,我的目录的内容是

app.yaml:

runtime: go1.12
env: flex
go.mod:

module mymodulename

go 1.13

require (
        github.com/go-stack/stack v1.8.0 // indirect
        github.com/inconshreveable/log15 v0.0.0-20200109203555-b30bc20e4fd1
        github.com/mattn/go-colorable v0.1.6 // indirect
)
main.go:

package main

import (
        "fmt"
        "net/http"
        "os"

        "github.com/inconshreveable/log15"
)

func main() {
        log := log15.New()

        http.HandleFunc("/", helloHandler)

        port := os.Getenv("PORT")
        if port == "" {
                port = "8080"
                log.Info("Using default port", "port", port)
        }

        log.Info("Listening", "port", port)
        if err := http.ListenAndServe(":"+port, nil); err != nil {
                log.Crit("ListenAndServe", "error", err)
                os.Exit(1)
        }
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, there")
}
谢谢。

IIUC Flexible不支持模块(标准支持,如图所示!)

你可以:

  • 或者使用自定义运行时
  • 或者,删除
    go.mod
    |
    go.sum
    并重试
我复制了你的
app.yaml
main.go
,它对我起了作用

对您的
app.yaml
进行一次更改:

runtime: go
env: flex
然后:

获取github.com/inchreveable/log15
快跑,快跑
信息[05-15 | 09:33:26]使用默认端口=8080
信息[05-15 | 09:33:26]侦听端口=8080
以及:

curl——静默http://localhost:8080
你好,那里
以及:

gcloud应用程序部署--project=${project}
卷曲——沉默$(\
gcloud应用程序描述\
--项目=${project}\
--format=“value(defaultHostname)”)
你好,那里

Argh!这在文档中并不清楚,尽管(现在你已经说过了)我找到了一个仅仅暗示它的参考。非常感谢。另外,我发现我可以将go.mod排除在.gcloudignore中,这同样有效。现在还不清楚。我也对此感到惊讶!在其他条件相同的情况下,标准可能是更好的选择。标准版支持1.12,测试版支持1.13。既然Flex正在为您将应用程序容器化,为什么不进行定制呢?然后你也可以选择使用Cloud Run。”…为什么不去定制呢?”因为我想限制我需要学习和维护的技术数量。但最终那可能是一条不错的路线。公平!Flexible为您构建容器。ToMH
gcloud容器映像列表--project=${project}
将枚举它。它被配置为默认值
:8080
。在部署Nginx时,Flexible附带了Nginx,但您可以
gcloud运行deploy…
容器。问题描述得很清楚!