我的项目的文件夹结构如下
/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 app deploy
我遇到以下错误:
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构建器在初始构建步骤中可以正常运行,但随后在应用程序部署步骤(gcloud应用程序部署)上失败
应用程序引擎不支持go.mod中的相对路径吗?如果可以,是否可以使此文件夹结构正常工作?
编辑:
这最终成为密钥How to authenticate a private Go Module using go 1.11 and Google App Engine Standard
由于在App Engine中部署时,未上传根文件夹结构,因此,一个解决方法是在子文件夹内的父文件夹中复制,该子文件夹用于存放app.yaml。然后使用替换语法指向go.mod中的新子文件夹。