google-app-engine - Google App Engine goapp“部署”工作但“服务”失败,这是怎么回事?
问题描述
我今天开始使用 Google App Engine,所以希望对有经验的人来说答案是显而易见的。在简单地按照这种方法让 App Engine 与 Cloud SQL 交互之后,我遇到了一个令人沮丧的问题:goapp deploy成功但goapp serve失败(使用云 shell)。
这是错误:
XXXX@cloudshell:~/src/XXXX/app-engine (XXXX)$ goapp serve app.yaml
INFO 2018-06-21 07:29:08,115 devappserver2.py:764] Skipping SDK update check.
INFO 2018-06-21 07:29:08,235 api_server.py:268] Starting API server at: http://0.0.0.0:60628
INFO 2018-06-21 07:29:08,305 dispatcher.py:199] Starting module "default" running at: http://0.0.0.0:8080
INFO 2018-06-21 07:29:08,306 admin_server.py:116] Starting admin server at: http://0.0.0.0:8000
ERROR 2018-06-21 07:29:12,254 go_runtime.py:181] Failed to build Go application: (Executed command: /google/go_appengine/goroot/bin/go-app-builder -app_base /home/XXX/app-engine -arch 6 -dynamic -goroot /google/go_appengine/goroot -gopath /home/XXX/gopath:/google/gopath -nobuild_files ^^$ -incremental_re
build -unsafe -binary_name _go_app -extra_imports appengine_internal/init -work_dir /tmp/tmpT1RTRMappengine-go-bin -gcflags -I,/google/go_appengine/goroot/pkg/linux_amd64_appengine -l
dflags -L,/google/go_appengine/goroot/pkg/linux_amd64_appengine hello.go)
/home/XXX/gopath/src/github.com/go-sql-driver/mysql/connection.go:12: can't find import: "context"
2018/06/21 07:29:09 Can't find package "context" in $GOPATH: cannot find package "context" in any of:
/google/go_appengine/goroot/src/context (from $GOROOT)
/home/XXX/gopath/src/context (from $GOPATH)
/google/gopath/src/context
2018/06/21 07:29:12 go-app-builder: build timing: 0×skip (3ms total), 9×compile (2.731s total), 0×link (0 total)
2018/06/21 07:29:12 go-app-builder: failed running compile: exit status 2
我怀疑使用的 go 版本是错误的。声明的版本是 1.6.3,但据我了解,“上下文”需要 1.7。这是相关的云外壳输出:
XXXX@cloudshell:~ (XXX)$ goapp version
go version go1.6.3 (appengine-1.9.48) linux/amd64
XXXX@cloudshell:~ (XXX)$ go version
go version go1.10 linux/amd64
然而,尽管我尽了最大的努力,我还是找不到任何关于如何操作“goapp”go 版本的资源。
我的 app.yaml 包括:
runtime: go
api_version: go1.8
goapp get 会产生这样的结果:
XXXX@cloudshell:~/src/XXX/app-engine (XXX)$ goapp get
package context: unrecognized import path "context" (import path does not begin with hostname)
go 文件本身是上面链接中演示的精确副本。
解决方案
正如对解决方案使用的问题的评论所证实的那样dev_appserver.py
,而不是goapp serve
.
goapp
是处理 GAE 任务的旧工具。现在建议dev_appserver.py
用于本地开发,以及gcloud app
用于云中任务的命令(例如gcloud app deploy
,而不是goapp deploy
)。
请注意,这goapp
并没有被弃用,但dev_appserver.py
在本地开发中提供了更大的灵活性,同时gcloud app
使用了正确记录且非常有用的App Engine Admin API(与旧工具不同),如果您的部署出现问题,调试会变得更加容易。
推荐阅读
- computer-science - 证明可判定语言类在以下操作下是封闭的:互补、连接和交集
- java - InheritanceType.JOINED 和 Spring Data Rest 的问题
- javascript - 有谁知道每次打开 index.html 页面时如何自动运行 .json 文件中的脚本?
- html - 是否有“Enter”或“Tab”excel VBA 可以在网页上执行?
- python - 对张量流图的部分进行基准测试的正确方法是什么?
- android - 在 Firebase Auth 中,如何检测匿名用户升级为 Facebook 用户?
- firebase - Flutter 设计模式:混合构建方法和异步函数
- c++ - 二进制搜索功能 - 即使在数组中找不到数字,也会输出比较次数
- unit-testing - 当连接位于结构中时,我应该如何在 Go 中模拟 Redis 连接?
- r - 使用两个时间序列列转换数据