Ошибка при попытке развернуть облачную функцию Google в Go 1.11 с использованием модулей go

У меня возникают проблемы при попытке развернуть облачную функцию Google в Go 1.11 с использованием модулей Go. В моем 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 успешно выполняются локально, и я вижу свой локальный пакет models в папке поставщика load


person samir elsharkawy    schedule 28.01.2019    source источник


Ответы (1)


Модули предпочитают производитель, а не поставщик. Если есть go.mod, будут использоваться модули. Когда вы загружаете свою функцию, она включает только каталог с вашей функцией в корне, а не каталоги на один уровень выше. Итак, когда есть go.mod и у вас есть директива replace, указывающая на один уровень выше, это не сработает.

Решение состоит в том, чтобы продавать, а не загружать файлы _3 _ / _ 4_. При использовании gcloud вы можете создать .gcloudignore файл, чтобы сделать это за вас. См. https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependencies для получения более подробной информации.

Отказ от ответственности: я работаю в Google и над этим продуктом.

person Tyler Bui-Palsulich    schedule 29.01.2019
comment
metadata.FromContext не будет работать при использовании поставщика в соответствии с этим сообщением. Какие-нибудь решения без вендинга? - person N.F.; 03.08.2020