go - 使用 go.mod 灵活部署到谷歌应用引擎失败,因为它正在 GOPATH 中寻找依赖库
问题描述
我从这里获得了 helloworld 应用程序,并进行了一些修改。
- 我使用过 logrus(引入对外部库的依赖)
- 我使用 go mod init 添加了一个 go.mod
- 我在我的 GOPATH 之外签出了这段代码。
一切都在本地主机上运行。我可以在 localhost:8080 上看到 hello 消息。当我尝试执行 gcloud app deploy 时,出现以下错误:
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
没有帮助。我究竟做错了什么?
解决方案
我有一个解决方法给你——它不漂亮。我不知道为什么应用程序引擎不尝试使用 go 模块解决依赖关系,而是只在 $GOPATH 中查找。
我的解决方法是将 go modules 缓存中的相应文件夹复制回 Go Path。我很想知道是否有人有更好的解决方案。
你的模组缓存应该在$GOPATH/pkg/mod
将您需要的依赖项复制到您的$GOPATH/src
文件夹中,您应该一切顺利。
相关问题,希望这对某人有所帮助。这让我陷入了困境,因为我最近切换到 Go 模块,而 GAE 抱怨依赖项中的一个错误,该错误已在其较新版本中得到修复。我多次更新了依赖项,它在本地测试中运行良好,但在app deploy
. 最终我意识到发生了什么:在本地运行代码时,Go 从 go 模块缓存中正确组装了依赖项 - 应用程序引擎从 Go 路径的“旧”位置获取它。启用 Go 模块go get
后,只会更新 mod 缓存。
推荐阅读
- gitlab - 如何在 gitlab-ci.yml 中定义和使用字符串列表
- javascript - 如何使用 AWS SDK v3 为经过身份验证的用户请求临时 STS 凭证?
- excel - 是否可以使用动态过滤器的结果填充 Excel 工作表?
- amazon-ec2 - 是否可以在不同的 EC2 机器上创建一个 Kafka 集群?
- firebase - VSCode 不再自动完成/建议 firebase 方法?
- mysql - MySQL 查询未按预期运行
- batch-file - 使用“rundll 键盘,禁用”运行批处理文件是否需要恢复出厂设置才能修复?
- esp8266 - ESP8266-12F WiFi 软 AP config.authmode 失败
- r - 包足球动画
- php - 带有文本框自定义验证的 Wordpress Ninja 表单