Google app engine 在app engine中部署相对路径go模块

Google app engine 在app engine中部署相对路径go模块,google-app-engine,go,gcloud,google-cloud-build,Google App Engine,Go,Gcloud,Google Cloud Build,我的项目的文件夹结构如下所示 /folder1 /feature1 feature1.go //package feature1 go.mod /feature2 feature2.go //package feature2 go.mod /web app.yaml cloudbuild.yaml main.go //package main (starts app) go.mod 这是我的/web/go.mod module m

我的项目的文件夹结构如下所示

/folder1
  /feature1
     feature1.go //package feature1
     go.mod
  /feature2
     feature2.go //package feature2
     go.mod
/web
  app.yaml
  cloudbuild.yaml
  main.go //package main (starts app)
  go.mod
这是我的
/web/go.mod

module mypackage

require(
  //3rd party packages
  feature1 v0.0.0
  feature2 v0.0.0
)

replace(
  feature1 => ../folder1/feature1
  feature2 => ../folder1/feature2
)
如果我运行
GO111MODULE=on-go-build
,这将很好地编译,我可以运行我的项目

但是,如果我执行
gcloud应用程序部署

我得到以下错误:

go: parsing ../folder1/feature1/go.mod: open /tmp/staging614917184/folder1/feature1/go.mod: no such file or directory

go: parsing ../folder1/feature2/go.mod: open /tmp/staging614917184/folder1/feature2/go.mod: no such file or directory
这些文件肯定存在于我的项目中(否则本地go构建将无法工作)

下面是我的app.yaml的相关片段

runtime: go111
env: standard
在我切换到使用go.mod之前,该应用程序通过gcloud cli部署良好

然而,我需要能够为我正在使用的一些软件包指定一个特定的版本,所以我想切换到使用go模块

通过上述更改,gcloud builder在初始构建步骤中工作正常,但在应用程序部署步骤(gcloud app deploy)中失败

app engine是否不支持go.mod中的相对路径?如果是这样,是否可以使此文件夹结构正常工作

编辑:

这最终成为关键


由于应用内引擎部署的根文件夹结构未上载,因此修复方法是在存放app.yaml的子文件夹内的父文件夹上进行复制。然后使用替换语法指向go.mod中的新子文件夹。

我假设您是从
/web
目录中部署的
gcloud app
,该目录不包括复制
/folder
目录。我怀疑它在本地工作,但不能远程工作,因为
/文件夹
目录不在那里。我正在学习
go mod
,但我认为您可能希望使用它的完整路径引用
/folder
,例如
github.com/jon/folder
,而不是相对引用,将其视为不同的(单独管理的|版本化)包,并在找不到时将其拉取。啊,这是有意义的。嗯,存储库是私有的,所以在这种情况下,gcloud在下载时似乎会遇到问题?我不熟悉构建器的工作方式,但是有没有办法强制包含文件夹?我认为解决这个问题的方法是将
/folder1
设置为
/web
的子目录。在
web/main.go
中将导入的
修改为
web/folder1/feature1
。从
/web
中删除
go.mod
文件,并调用模块
web
。我刚刚为您尝试了这种结构,并且能够在本地构建和运行,并部署到App Engine standard。@Jon请将
编辑
作为答案,并将其标记为正确,如果问题中有答案,则需要一些人才能找到答案。