Развертывание в google app engine, гибкое с помощью go.mod, завершается неудачно, поскольку он ищет зависимые библиотеки в GOPATH - PullRequest
0 голосов
/ 04 февраля 2019

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

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

Все работает на localhost.Я могу видеть приветственное сообщение на localhost: 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 и без, не помогает.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

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

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

0 голосов
/ 19 апреля 2019

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

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

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

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

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

...