Перейти на продажу в App Engine Standard - PullRequest
0 голосов
/ 14 мая 2018

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

Я не могу заставить продавцов работать для моего приложения Go в App Engine Standard. Я использую dep для продажи.

Я создаю GraphQL API, и вот моя структура папок:

/GOPATH
└──/src
   └──/acme
      ├──/app
      |   ├── app.yaml
      |   └── app.go
      ├──/src
      |   ├── /mutations/
      |   ├── /queries/
      |   └── /types/
      └──/vendor/

Запуск goapp serve app/app.yaml в облачной оболочке завершается с ошибкой

INFO     2018-05-14 15:42:08,386 devappserver2.py:764] Skipping SDK update check.
INFO     2018-05-14 15:42:08,471 api_server.py:268] Starting API server at: http://0.0.0.0:47213
INFO     2018-05-14 15:42:08,600 dispatcher.py:199] Starting module "default" running at: http://0.0.0.0:8080
INFO     2018-05-14 15:42:08,601 admin_server.py:116] Starting admin server at: http://0.0.0.0:8000
ERROR    2018-05-14 15:42:13,983 go_runtime.py:181] Failed to build Go application: (Executed command: /google/go_appengine/goroot/bin/go-app-builder -app_base /home/xxx/gopath/src/acme/app -arch 6 -dynamic -goroot /google/go_appengine/goroot -gopath /home/xxx/gopath:/google/gopath -nobuild_files ^^$ -incremental_rebuild -unsafe -binary_name _go_app -extra_imports appengine_internal/init -work_dir /tmp/tmpbt8DA2appengine-go-bin -gcflags -I,/google/go_appengine/goroot/pkg/linux_amd64_appengine -ldflags -L,/google/go_appengine/goroot/pkg/linux_amd64_appengine app.go)
/home/xxx/gopath/src/acme/vendor/github.com/graphql-go/graphql/definition.go:4: can't find import: "context"

2018/05/14 15:42:09 Can't find package "context" in $GOPATH: cannot find package "context" in any of:
        /home/xxx/gopath/src/acme/vendor/context (vendor tree)
        /google/go_appengine/goroot/src/context (from $GOROOT)
        /home/xxx/gopath/src/context (from $GOPATH)
        /google/gopath/src/context

Похоже, проблема может заключаться в том, что один поставщик не использует полное имя зависимости для "контекста". (РЕДАКТИРОВАТЬ: вероятно, не тот случай, так как я использую 1.8)

Кому-нибудь когда-нибудь удавалось успешно выполнить развертывание на App Engine Standard с помощью вендоров? Вот и весь день тяну за волосы.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

На всякий случай, если кто-то еще борется с этим, этот подход, который я выбрал, кажется, работает для меня.

Структура каталогов выглядит следующим образом:

/GOPATH
├──/appengine
|  ├──/.git/
|  ├──/project1
|  |  ├── app.yaml
|  |  └── app.go
|  └──/project2
|     ├── app.yaml
|     └── app.go
└──/src
   ├──/project1
   |  ├──/.git/
   |  ├──/mutations/
   |  ├──/queries/
   |  ├──/types/
   |  ├──/vendor/
   |  └──/main.go
   └──/project2
      ├──/.git/
      ├──/foo/
      ├──/bar/
      ├──/vendor/
      └──/main.go

Каждый файл app.go в папке appengine содержит:

package projectX

import "projectX"

func init() {
    projectX.Run()
}

Каждый main.go файл ниже src / projectX содержит:

package projectX

import (
    // Import whatever you need
    "google.golang.org/appengine"
)

func Run() {
    // Do whatever you need
    appengine.Main()
}

Кажется, что наличие папки, содержащей app.yaml вне $ GOPATH / src, действительно необходимо.

Это также не идеально для управления версиями, если вам нужно, чтобы каждый проект имел версию под своим собственным git-репо, в отличие от одного монолитного репо. Я решил это путем создания версий каждого проекта и управления версиями папки appengine, а также отдельно.

0 голосов
/ 27 сентября 2018

У меня были проблемы, я целую вечность оглядывался, пытаясь понять, почему это не работает. Этот ответ немного запоздал, но, надеюсь, будет полезен всем, у кого есть эта проблема.

Я обновился, чтобы использовать Go 1.11, который, по моему мнению, не поддерживается (нашел один из примеров GCP на github, используя его здесь )

Установите runtime: go111 в app.yaml, и он будет поддерживать вендорство и даст вам ссылку на правильный журнал сборки.

Теперь моя структура каталогов выглядит следующим образом.

/GOPATH └──/src ├──/project1 | ├──/.git/ | ├──/whateverCode/ | ├──/vendor/ | └──/main.go | └──/app.yaml

Я предполагаю, что если он поддерживает Go 1.11, мы могли бы также использовать Модули для управления версиями, но я еще не рассматривал это.

0 голосов
/ 15 мая 2018

Пакет context будет находиться внутри $GOROOT (не в каталоге vendor).Возможно, ваш Go Appengine SDK устарел и не поддерживает Go 1.8.

Обновите SDK до последней версии.$GOROOT должно быть похоже на /path/to/somewhere/goroot-1.8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...