Как использовать модули для замены функциональности в облачных функциях

У меня есть облачная функция Google, которая является подкаталогом в репозитории. Он использует опцию «Каталог с исходным кодом» в меню настроек. Я продолжаю получать эту ошибку при развертывании:

Deployment failure:
Build failed: go: parsing /utils/pubsub/go.mod: open /utils/pubsub/go.mod: no such file or directory
go: error loading module requirements

Я предполагаю, что GCF загружает в экземпляр не весь каталог, а только папку? Это нарушает функциональность замены модулей Go. Я что-то делаю не так?

Ссылка на репо: https://github.com/FreekingDean/jeffbotgo/tree/5d735cc/slackevent


person Dean Galvin    schedule 24.01.2019    source источник


Ответы (2)


Я работаю в Google и над этим продуктом.

Загружается только каталог, в котором вы запускаете gcloud. Нет никакого промежуточного шага, кроме заархивирования текущего каталога и его загрузки.

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

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

person Tyler Bui-Palsulich    schedule 29.01.2019

Сегодня у меня была такая же проблема.

При чтении документации в 8-й раз я наткнулся на окно с предупреждением под заголовком «Каталог поставщика».

Предупреждение: если в вашем проекте есть и файл go.mod, и каталог vendor в корне вашего проекта, каталог vendor будет проигнорирован во время развертывания. Вы должны использовать файл .gcloudignore, чтобы игнорировать файл go.mod, чтобы гарантировать, что каталог вашего поставщика используется во время развертывания.

Итак, в основном, как только я добавил файл .gcloudignore с go.mod (также добавлю go.sum), все сработало. Итак, я предполагаю, что если у вас есть файл go.mod, облачная функция попытается получить зависимости вместо использования тех, которые загружены в папку поставщика. Я тут просто догадываюсь.

person Oskar Öberg    schedule 25.01.2019