无法部署使用外部库的运行时 1.12 的 AppEngine Go 应用程序

我正在尝试将用 Go 编写的旧 Google App Engine(标准环境)项目迁移到运行时 1.12。自 2017 年底以来我就没有碰过它,从那以后似乎发生了很多变化。我已经能够解决一些问题,但由于我有一些外部依赖项,所以我无法部署代码。


尝试部署时控制台输出的相关部分


d:\src\go\src\data-axe>go env GOPATH

d:\src\go


d:\src\go\src\data-axe>gcloud app deploy --no-promote

...

Error type: BuildError.

Error message: 2019/09/27 19:10:09 Your app is not on your GOPATH, this build may fail.

2019/09/27 19:10:10 Building from Go source in /tmp/staging/srv, with main package at ./...

2019/09/27 19:10:10 Building /tmp/staging/srv, saving to /tmp/staging/usr/local/bin/start

2019/09/27 19:10:11 Wrote build output to /builder/outputs/output

2019/09/27 19:10:11 Failed to build app: Your app is not on your GOPATH, please move it there and try again.

...

 err=exit status 1, out=srv/main.go:6:2: cannot find package "github.com/microcosm-cc/bluemonday" in any of:

...

正如上面的代码片段所示,我的 GOPATH 设置为d:\src\go,我的应用程序位于d:\src\go\src\data-axe,并且我正在使用的 Bluemonday 位于 ,d:\src\go\src\github.com\microcosm-cc\bluemonday所以据我所知,所有这些都在我的 GOPATH 中。


用于指定依赖项的App Engine 文档说


如果您的应用程序位于 GOPATH 上的目录中,App Engine 会分析、复制并上传来自 GOPATH 的导入。此方法支持供应商目录。


这里一定有什么我不明白的地方。我的代码和我在 GOPATH 中使用的库都有,但当我尝试部署时,App Engine 似乎没有拾取并上传我的导入。


我的 main.go 中的导入使用绝对路径,正如文档所述:


package main


import (

    "fmt"

    "net/http"

    "github.com/microcosm-cc/bluemonday"

    "strings"

    "log"

    "os"

)

我究竟做错了什么?


慕盖茨4494581
浏览 83回答 1
1回答

慕姐4208626

我设法用两种不同的方式解决这个问题。第一个是将我的项目复制到 $GOPATH 之外,并启用 go 模块,当我这样做时,我能够成功部署我的应用程序,包括它的所有依赖项。我也成功地在没有 go 模块的情况下解决了问题。事实证明,很久没有碰过的不仅仅是我的项目。我的 Google Cloud SDK 也严重过时了。更新后,gcloud components update我能够正常部署我的应用程序,没有任何问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go