Приложение gcloud deploy не может найти пакеты для импорта - golang

avatar
hagh
8 апреля 2018 в 11:49
1231
1
2

Я уже развернул версию своего приложения в GAE, но теперь у меня возникли проблемы с развертыванием более новой версии. Когда я пытаюсь gcloud app deploy --version=VERSION, я получаю кучу ошибок, показывающих, что удаленная сборка не может найти мои пакеты импорта:

Beginning deployment of service [default]...
Building and pushing image for service [default]
Some files were skipped. Pass `--verbosity=info` to see which ones.
You may also view the gcloud log file, found at
[/home/****/.config/gcloud/logs/2018.04.08/***.log].
Started cloud build [***].
To see logs in the Cloud Console: https://console.cloud.google.com/gcr/builds/****?project=**

------------- REMOTE BUILD OUTPUT --------------------------------------------

starting build "****"

FETCHSOURCE
Fetching storage object: gs://staging.****.appspot.com/us.gcr.io/****/appengine/default.20180408t040210:latest#****
Copying gs://staging.****.appspot.com/us.gcr.io/****/appengine/default.***:latest#***...
/ [1 files][  6.9 MiB/  6.9 MiB]                                                
Operation completed over 1 objects/6.9 MiB.                                      
BUILD
Starting Step #0
Step #0: Pulling image: gcr.io/gcp-runtimes/go1builder@sha256:****
Step #0: sha256:***: Pulling from gcp-runtimes/go1-builder
Step #0: Digest: sha256:***
Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/go1-builder@sha256:***
Step #0: main.go:5:2: cannot find package "config" in any of:
Step #0:    /usr/local/go/src/config (from $GOROOT)
Step #0:    /workspace/_gopath/src/config (from $GOPATH)
Step #0: main.go:6:2: cannot find package "db" in any of:
Step #0:    /usr/local/go/src/db (from $GOROOT)
Step #0:    /workspace/_gopath/src/db (from $GOPATH)
...
Finished Step #0
ERROR
ERROR: build step 0 "gcr.io/gcp-runtimes/go1builder@sha256:***" failed: exit status 1
-------------------------------------------------------------------------------

ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/gcr/builds/***?project=*** Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details

Я испробовал несколько предложений по правильной настройке GOPATH, включая запуск команды от имени пользователя root, sudo -E и установку общесистемного GOPATH, пока безуспешно. Я получаю один и тот же набор ошибок независимо от того, выполняю ли я развертывание в Cloud Shell или запускаю команду в своей локальной настройке. Если я установлю неправильный GOPATH, сборка завершится ошибкой до перехода к этапу удаленной сборки. Я также не изменил структуру исходного кода с первого развертывания.

Я потратил на это много времени и буду признателен за любую помощь или совет. Спасибо.

EDIT: Вот мой app.yaml

runtime: go
env: flex
api_version: go1

env_variables:
   APP_DATABASE_CONFIG: "{...}"
   APP_CONFIG: "{...}"

Также при запуске dev_appserver.py app.yaml я получаю следующий вывод: dev_appserver.py app.yaml

INFO     2018-04-11 05:20:51,040 application_configuration.py:506] No version specified. Generated version id: 20180411t052051
WARNING  2018-04-11 05:20:51,040 application_configuration.py:163] The Managed VMs runtime is deprecated, please consider migrating your application to use the Flexible runtime. See https://cloud.google.com/appengine/docs/flexible/python/migrating for more details.
INFO     2018-04-11 05:20:51,040 devappserver2.py:105] Skipping SDK update check.
INFO     2018-04-11 05:20:51,102 api_server.py:265] Starting API server at: http://localhost:46211
INFO     2018-04-11 05:21:16,233 dispatcher.py:255] Starting module "default" running at: http://localhost:8080
INFO     2018-04-11 05:21:16,234 admin_server.py:152] Starting admin server at: http://localhost:8000
...

В целом все работает нормально, за исключением этого предупреждения в начале. Я не знаю, почему он выдает это предупреждение, несмотря на мою конфигурацию app.yaml, но если это поможет, то первый экземпляр, который я развернул, был стандартным проектом (демонстрационный проект Google), и позже я удалил этот экземпляр.

Мне интересно, откуда берутся эти GOROOT (/usr/local/go/) и GOPATH (/workspace/_gopath/) на удаленной стороне? Это настройки по умолчанию? Кроме того, если это поможет, те пакеты db и config, показанные в сообщениях об ошибках, являются моими, и они находятся в root-root/src.

app.yaml находится в корневом каталоге проекта/src/web. Мой GOPATH установлен в корневой каталог проекта. Мой GOROOT пуст.

Источник
Tyler Bui-Palsulich
10 апреля 2018 в 21:09
0

Можете ли вы запустить приложение локально с помощью dev_appserver.py (из каталога с вашим app.yaml)? Можете ли вы опубликовать свой файл app.yaml?

hagh
11 апреля 2018 в 05:40
0

Спасибо @TylerBui-Palsulich. Пожалуйста, смотрите мои правки выше. За исключением этого предупреждения, я не вижу ничего плохого в dev_appserver.py.

Ответы (1)

avatar
Tyler Bui-Palsulich
11 апреля 2018 в 12:21
2

В файле Flex app.yaml не должно быть

api_version: go1

Вы можете полностью удалить строку. Он нужен только для App Engine Standard.

Здесь приведен пример гибкого файла app.yaml App Engine. См. документы для справки о том, что можно настроить в файле Flex app.yaml.

hagh
12 апреля 2018 в 03:31
0

Большое спасибо @Tyler. Это сработало. Я думаю, у меня было это право для моего первого успешного развертывания, но тогда я мог забыть правильно зафиксировать изменения. dev_appserver.py по-прежнему генерирует это предупреждение, но на самом деле это не имеет значения, пока все работает.

Tyler Bui-Palsulich
12 апреля 2018 в 18:42
1

Я рад, что это помогло! Пожалуйста, рассмотрите возможность принятия ответов, когда они решат проблему, но без давления. :)