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

时间:2019-09-27 19:53:07

标签: google-app-engine go google-app-engine-go

我正在尝试迁移用Go到运行时1.12编写的旧Google App Engine(标准环境)项目。自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中,而我正在使用的Bluemonday则位于d:\src\go\src\data-axe中,所以据我所知这是在我的GOPATH中。

specifying dependencies说的App Engine文档

  

如果您的应用程序位于GOPATH上的目录中,则App Engine会分析,复制并上传从GOPATH导入的内容。这种方法支持供应商目录。

这里一定有些我不懂的东西。我在GOPATH中同时使用了代码和库,但是在尝试进行部署时,App Engine似乎没有拾取并上传我的导入内容。

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

d:\src\go\src\github.com\microcosm-cc\bluemonday

我在做什么错了?


修改

package main import ( "fmt" "net/http" "github.com/microcosm-cc/bluemonday" "strings" "log" "os" ) 的完整输出:

go env

1 个答案:

答案 0 :(得分:2)

我设法用两种不同的方式解决了这个问题。

首先是将我的项目复制到$ GOPATH之外,并启用go模块,如this simple guide中所述。当我这样做时,我能够成功地部署我的应用程序,包括所有依赖项。

我也设法不用go模块来解决问题。原来,很长一段时间都没有碰到不仅仅是我的项目。我的Google Cloud SDK也已严重过时。用gcloud components update更新它之后,我能够正常部署应用程序而没有任何问题。