Golang Cloud SDK - gcloud app deploy无法找到导入包

Lui*_*tni 8 google-app-engine go google-cloud-platform gcloud

根据Google App Engine标准环境(Go API)的官方文档," 部署项目的首选工具 "现在是Cloud SDK,因此我们从goapp迁移到gcloud.

我们无法将Go项目部署到GAE,因为在"部署时"无法找到每个给定项目的所有子包.我们为每个GAE项目使用的典型文件夹结构如下:

-project-name
--app.yaml
--main.go
--assets
---package1
---package2
Run Code Online (Sandbox Code Playgroud)

当全局图书馆被放入系统时,GOPATH一切顺利.

gcloud app deploy我们现在运行得到这个:

You are about to deploy the following services:
 - yourproject/default/123456789 (from [/Path/to/app.yaml])
     Deploying to URL: [https://yourproject.appspot.com]

Do you want to continue (Y/n)?  Y

Beginning deployment of service [default]...
ERROR: (gcloud.app.deploy) Staging command [/path/to/yourproject/app.yaml /var/folders/b6/5ydn0wdn64jd32sxzzz48b7c0000gn/T/tmpbd4oiG] failed with return code [1].

------------------------------------ STDOUT ------------------------------------
------------------------------------ STDERR ------------------------------------
2017/03/24 10:25:58 failed analyzing /path/to/yourproject: cannot find package "yourpackage" in any of:
        ($GOROOT not set)
        /path/to/gopath/src/yourpackage (from $GOPATH)
GOPATH: /path/to/gopath
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

虽然dev_appserver.py工作完美保持相同的文件夹结构.

我们错过了什么吗?我们如何使用gcloud部署到Google App Engine Standard环境?

如果项目结构需要改变:如何?有关于它的官方文件吗?

提前致谢,

编辑 -更多信息:

Luigi-Mac-Pro:path/to/yourproject distudio$ gcloud version
Google Cloud SDK 148.0.0
app-engine-go 
app-engine-go-darwin-x86_64 1.9.50
app-engine-python 1.9.50
bq 2.0.24
bq-nix 2.0.24
core 2017.03.17
core-nix 2016.11.07
gcloud 
gcloud-deps 2017.03.17
gcloud-deps-darwin-x86_64 2017.02.21
gsutil 4.23
gsutil-nix 4.22
Run Code Online (Sandbox Code Playgroud)

Bet*_*mos 5

Google建议您将依赖项保留在应用程序目录之外,并使用GOPATH它们进行引用.在您的情况下,这意味着要做以下事情:

-project-name
--app.yaml
--main.go
Run Code Online (Sandbox Code Playgroud)

哪里main.go包含

import (
    "package1"
    "package2"
)
Run Code Online (Sandbox Code Playgroud)

而在其他地方:

-my_packages
--src
---package1
---package2
Run Code Online (Sandbox Code Playgroud)

然后设置GOPATH环境变量path/to/my_packages在运行之前dev_appservergcloud app deploy.

为未来

我们正在制定长期解决方案,以便在您的应用程序目录中正确销售软件包 - 可能使用Go的未来本机软件包管理器.我很遗憾地说我们没有很好的方法来支持子包gcloud app deploy.这是与App Engine Flexible环境兼容的不幸副作用.

  • @Betamos甚至谷歌自己的软件包如golang.org/x/net/context也无法与gcloud一起工作......重点是什么?我在谈论App Engine Standard环境.Documentations肯定缺少一个非常基本的教程,新旧用户都被gcloud sdk卡住了 (4认同)