Развертывание гибкого механизма приложений Google с помощью go.mod завершается сбоем, поскольку он ищет зависимые библиотеки в GOPATH.

У меня есть приложение helloworld из здесь с парой модификаций.

  1. Я использовал logrus (чтобы установить зависимость от внешней библиотеки)
  2. Я добавил go.mod с помощью go mod init.
  3. У меня есть проверка этого кода вне моего GOPATH.

На локалхосте все работает. Я вижу приветственное сообщение на локальном хосте: 8080. Когда я пытаюсь выполнить развертывание приложения gcloud, я получаю следующую ошибку:

staging for go1.11
Staging Flex app: failed analyzing /home/.../code/app-engine-gomod: cannot find package "github.com/sirupsen/logrus" in any of:
    ($GOROOT not set)
    /home/.../go/src/github.com/sirupsen/logrus (from $GOPATH)
GOPATH: /home/.../go

Я пробовал с go mod vendor и без него, не помогает. Что я делаю не так?


person Rohith    schedule 04.02.2019    source источник
comment
Вы когда-нибудь понимали, что здесь происходит?   -  person Oliver    schedule 02.04.2019
comment
@ Оливер, нет, не знал. Я начал использовать гибкость механизма приложения с файлом Dockerfile.   -  person Rohith    schedule 03.04.2019
comment
Ах, это раздражает, я вернулся к использованию dep. Поскольку это согласуется с другими частями проекта. Я чувствую, что многое из этого наполовину закончено и наполовину задокументировано. :(   -  person Oliver    schedule 03.04.2019
comment
Похоже, вот официальный ответ: github.com/golang/go/issues/34107   -  person Matías Blasi    schedule 21.01.2020


Ответы (2)


У меня есть обходной путь для вас - это некрасиво. Я не знаю, почему движок приложения не пытается разрешить зависимости с модулями go, а вместо этого смотрит только в $GOPATH.

Мой обходной путь — просто скопировать соответствующую папку из кеша модулей go обратно в путь перехода. Я хотел бы знать, если у кого-то есть лучшее решение.

Ваш кеш мода должен быть в $GOPATH/pkg/mod

Скопируйте нужные вам зависимости в папку $GOPATH/src, и все будет готово.

Связанная проблема, надеюсь, это поможет кому-то. Это привело меня в кроличью нору, потому что я недавно переключился на модули Go, а GAE жаловался на ошибку в зависимости, которая была исправлена ​​в более новой версии. Я обновлял зависимость несколько раз, она отлично работала при локальном тестировании, но я продолжал получать ту же ошибку на app deploy. В конце концов я понял, что происходит: при локальном запуске вашего кода Go правильно собирал зависимости из кеша модулей go — движок приложения брал их из «старого» местоположения из Go Path. После включения модулей Go go get обновляется только кеш модов.

person shrumm    schedule 19.04.2019
comment
У меня похожая проблема, копирование в моем случае не особо помогло - stackoverflow.com/questions/57822057/ - person automaticAllDramatic; 06.09.2019

Согласно документации App Engine Standard и Flex, оба поддерживают среду выполнения Go 1.11. Теперь мы знаем, что Go 1.11 ввел экспериментальную поддержку модулей Go, сохранив совместимость с GOPATH. . Однако при использовании модулей Go через файл go.mod представлен подход для Standard это вообще не упоминается для флекса.

Итак, для Flex у вас либо есть все под GOPATH, следуя указаниям в документации, либо придерживайтесь обходного пути, предоставленного @shrumm.

person alextru    schedule 14.05.2019