Как использовать модули заменить функциональность в облачных функциях - PullRequest
0 голосов
/ 25 января 2019

У меня есть облачная функция 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

Ответы [ 2 ]

0 голосов
/ 30 января 2019

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

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

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

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

0 голосов
/ 25 января 2019

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

Читая документацию в восьмой раз, я наткнулся на окно с предупреждением под заголовком «Каталог поставщиков».

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

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

...