如何让供应商与 Google App Engine 配合使用?

2024-04-28

我正在尝试引入 Go 供应商(将依赖项存储在名为的文件夹中)vendor) 到现有的 App Engine 项目。我已将所有依赖项存储在供应商文件夹中(使用 Godep 作为助手),它看起来是正确的,但在本地运行应用程序时出现以下错误:

go-app-builder: Failed parsing input: package "golang.org/x/net/context" is imported from multiple locations: "/Users/erik/go/src/github.com/xyz/abc/vendor/golang.org/x/net/context" and "/Users/erik/go/src/golang.org/x/net/context"

我相信这两个位置应该解析为相同的位置,因为 Go 应用程序应该在vendor首先文件夹。有没有办法让 Appengine 理解这两个依赖项是相同的?


您的项目目录(app.yaml 所在的位置)可能位于 GOPATH/src 中。 不应该的。 go-app-builder 将获取 app.yaml 文件夹(及下面)中的所有内容,并将您的 GOPATH 合并到其中,这意味着现在您拥有它两次。

解决方案是将 app.yaml 从 GOPATH/src 文件夹中移出。 另外你会发现goapp test工作方式不同于goapp serve and goapp deploy当涉及到解决依赖关系时。

所以这是我一直在使用的解决方案(已经有一段时间没有使用 golang 应用程序引擎了),这是我发现的唯一可以正常工作的设置goapp命令和govendor正常工作(不确定godep)

/GOPATH
├──/appengine
|   ├── app.yaml
|   └── aeloader.go
└──/src
    └── /MYPROJECT
         ├── main.go
         ├── /handler
         |    └── handler.go
         └── /vendor

details:

file: GOPATH/appengine/aeloader.go (NOTE the init function is necessary, probably a bug though)
package mypackage

import (
    _ "MYPROJECT"
)

func init() {
}

now run goapp serve and goapp deploy from ../GOPATH/appengine/ and goapp test ./... from ../GOPATH/src/MYPROJECT

附:我发现全局 GOPATH 很愚蠢,只需将我的 GOPATH 设置为当前项目文件夹(在上面的示例中)/GOPATH)并将整个事情检查到版本控制中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让供应商与 Google App Engine 配合使用? 的相关文章

随机推荐