我正在尝试迁移用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
答案 0 :(得分:2)
我设法用两种不同的方式解决了这个问题。
首先是将我的项目复制到$ GOPATH之外,并启用go模块,如this simple guide中所述。当我这样做时,我能够成功地部署我的应用程序,包括所有依赖项。
我也设法不用go模块来解决问题。原来,很长一段时间都没有碰到不仅仅是我的项目。我的Google Cloud SDK也已严重过时。用gcloud components update
更新它之后,我能够正常部署应用程序而没有任何问题。