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请将编辑作为答案,并将其标记为正确,如果问题中有答案,则需要一些人才能找到答案。