我有来自here的helloworld应用程序,并进行了一些修改。
一切都适用于localhost。我能在localhost:8080上看到hello消息。当我尝试进行gcloud app部署时,出现以下错误:
staging for go1.11
Staging Flex app: failed analyzing /home/.../code/app-engine-gomod: cannot find package "github.com/sirupsen/logrus" in any of:
($GOROOT not set)
/home/.../go/src/github.com/sirupsen/logrus (from $GOPATH)
GOPATH: /home/.../go
我尝试过和没有go mod vendor
没有帮助。我究竟做错了什么?
我有一个解决方法 - 它不漂亮。我不知道为什么app引擎不会尝试使用go模块解决依赖关系,而只是在$ GOPATH中查找。
我的解决方法是将go模块缓存中的相应文件夹复制回Go Path。我很想知道是否有人有更好的解决方案。
你的mod缓存应该在$GOPATH/pkg/mod
中
将您需要的依赖项复制到$GOPATH/src
文件夹中,您应该很高兴。
相关问题,希望这有助于某人。这导致我陷入了一个兔子洞,因为我最近切换到Go模块,并且GAE抱怨一个依赖的错误,这个错误在更新版本中得到修复。我多次更新了依赖项,它在本地测试中运行良好,但我在app deploy
上一直遇到同样的错误。最终我意识到发生了什么:在本地运行代码时,从go模块缓存中正确组装依赖项 - 应用程序引擎从Go Path中的“旧”位置获取它。一旦启用Go模块,go get
只会更新mod缓存。
根据App Engine Standard和Flex的文档,两者都支持Go 1.11运行时。现在,我们知道Go 1.11 introduced对Go模块的实验支持,保持与GOPATH的兼容性。然而,虽然通过go.mod
文件使用Go模块是标准的presented方法,但它是用于Flex的not mentioned at all。
因此,对于Flex,要么您拥有GOPATH下的所有内容,请遵循文档中的指示,要么坚持使用@shrumm提供的解决方法。