使用go.mod部署到Google App Engine flexible失败,因为它正在GOPATH中寻找依赖库

时间:2019-02-04 05:57:32

标签: go app-engine-flexible go-modules

我有here的helloworld应用程序,并进行了一些修改。

  1. 我使用过logrus(将依赖关系引入到外部库中)
  2. 我已经使用go mod init添加了go.mod
  3. 我已经在我的GOPATH外部签出了这段代码。

一切都可以在localhost上进行。我可以在localhost:8080上看到问候消息。当我尝试进行gcloud应用程序部署时,出现以下错误:

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和不使用<div style="margin:0;padding:2rem 2rem;min-height:100vh;display: flex;align-items: center;"> <div class="row" style="display: flex;align-items: start;"> <div class="col-md-4" style="text-align: center;"> <img class="static" style="width: 85%;" src="http://nodorojo.com/img/responsive.png"><img class="active" style="width: 85%;" src="http://nodorojo.com/img/responsive.gif"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis, distinctio, cum iusto esse pariatur consectetur eligendi itaque quos totam voluptas rem mollitia voluptatem veniam reiciendis omnis, saepe eaque animi qui.</p> </div> </div> </div> 都没有帮助。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

我为您提供了一种解决方法-这并不漂亮。我不知道为什么App Engine不尝试使用go模块来解决依赖关系,而是只在$ GOPATH中查找。

我的解决方法是将go模块缓存中的相应文件夹复制回Go Path。我很想知道是否有人有更好的解决方案。

您的mod缓存应位于$GOPATH/pkg/mod

将所需的依赖项复制到$GOPATH/src文件夹中,您应该会很好。

相关问题,希望对您有所帮助。这使我陷入困境,因为我最近切换到了Go模块,而GAE则抱怨依赖项的错误,该依赖项已在较新版本中修复。我多次更新了依赖关系,它在本地测试中运行良好,但在app deploy上却始终遇到相同的错误。最终,我意识到发生了什么:在本地运行代码时,Go从go模块缓存中正确组装了依赖关系-应用引擎从Go Path的“旧”位置获取了依赖。启用Go模块后,go get仅更新mod缓存。

答案 1 :(得分:0)

根据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提供的解决方法。