尝试使用 go 模块在 Go 1.11 中部署 Google 云函数时出错
Error when trying to deploy Google cloud function in Go 1.11 using go modules
我在尝试使用 Go mod 规则在 Go 1.11 中部署 Google 云函数时遇到问题。我的 GOPATH
:
中有以下代码结构
└── example
├── models
│ ├── go.mod
│ └── models.go
└── load
├── fn.go
├── go.mod
├── go.sum
└── vendor
└── ....
load/go.mod 如下所示:
module github.com/example/load
require (
github.com/example/models v0.0.0
)
replace github.com/example/models => ../models
当我尝试使用命令部署函数时
gcloud functions deploy load-data --entry-point GCSNewFileTrigger --runtime go111 --trigger-resource new_data --trigger-event google.storage.object.finalize
我收到以下错误:
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: go: parsing /models/go.mod: open /models/go.mod: no such file or directory
go: error loading module requirements
命令 go mod vendor
和 go mod verify
运行 在本地成功,我可以在 load
[=20 的供应商文件夹中看到我的本地包 models
=]
建造者比供应商更喜欢模块。如果有 go.mod
,将使用模块。当您上传您的函数时,它仅包含您的函数位于根目录的目录,而不包含任何上一级目录。所以,当有一个 go.mod
并且你有一个指向上一级的替换指令时,它将不起作用。
解决方案是供应商而不是上传 go.mod
/go.sum
文件。使用 gcloud
时,您可以创建一个 .gcloudignore
文件来为您执行此操作。有关详细信息,请参阅 https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependencies。
免责声明:我在 Google 工作并开发此产品。
我在尝试使用 Go mod 规则在 Go 1.11 中部署 Google 云函数时遇到问题。我的 GOPATH
:
└── example
├── models
│ ├── go.mod
│ └── models.go
└── load
├── fn.go
├── go.mod
├── go.sum
└── vendor
└── ....
load/go.mod 如下所示:
module github.com/example/load
require (
github.com/example/models v0.0.0
)
replace github.com/example/models => ../models
当我尝试使用命令部署函数时
gcloud functions deploy load-data --entry-point GCSNewFileTrigger --runtime go111 --trigger-resource new_data --trigger-event google.storage.object.finalize
我收到以下错误:
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: go: parsing /models/go.mod: open /models/go.mod: no such file or directory
go: error loading module requirements
命令 go mod vendor
和 go mod verify
运行 在本地成功,我可以在 load
[=20 的供应商文件夹中看到我的本地包 models
=]
建造者比供应商更喜欢模块。如果有 go.mod
,将使用模块。当您上传您的函数时,它仅包含您的函数位于根目录的目录,而不包含任何上一级目录。所以,当有一个 go.mod
并且你有一个指向上一级的替换指令时,它将不起作用。
解决方案是供应商而不是上传 go.mod
/go.sum
文件。使用 gcloud
时,您可以创建一个 .gcloudignore
文件来为您执行此操作。有关详细信息,请参阅 https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependencies。
免责声明:我在 Google 工作并开发此产品。