无法将App app Error 422部署到AppEngine

时间:2016-10-14 20:23:19

标签: google-app-engine go

突然无法将Go app部署到GAE。没有更改任何代码和本地工作正常。

03:39 PM错误422:---开始服务器输出--- 编译失败: 2016/10/14 12:39:46 go-app-builder:解析输入失败:package main必须是顶级包 ---终端服务器输出---

由于它是一个云应用程序,我没有主程序包 - 几天前一切都很好。我在Windows 10上几天前得到并更新了...
我确实更新了最新的Go Cloud SDK但得到了同样的错误。

2 个答案:

答案 0 :(得分:1)

<强>编辑:

这个问题源于App Engine Standard为应用程序提供主要功能的新功能,正如我们的公开Google Groups post中所述。解决方法是将nobuild_files: commands/.*添加到“app.yaml”。官方修复此问题将在下一个SDK 1.9.47中发布。

与此同时,如果您有一个'main.go'文件,请确保它与您部署的目录级别(即顶级程序包)相同。同时确保您在主要功能中提供所需的appengine.Main(),如source code中所述。

我还建议在“{。}”的顶部添加// +build !appengine,如helloworld示例所示。这将告诉App Engine跳过尝试上传或编译任何未使用的代码,这也可能是部署失败的原因。

答案 1 :(得分:0)

您的app目录中是否有任何未导入的子目录可能包含主程序包?我已经得出结论,go-app-builder正在应用相当于go tool vet。/ ...(而不是go tool vet。)并使用旧版本。我最近在部署时遇到了这个错误:

01:05 PM Error 422: --- begin server output ---
Compile failed:
2016/10/19 10:05:23 go-app-builder: Failed parsing input (2 errors)
2016/10/19 10:05:23 appleasn1.go:16:25: composite struct literal encoding/asn1.ObjectIdentifier with unkeyed fields
2016/10/19 10:05:23 appleasn1.go:17:25: composite struct literal encoding/asn1.ObjectIdentifier with unkeyed fields
--- end server output ---
01:05 PM Rolling back the update.

asn1.ObjectIdentifier是[] int的别名,因此这不是复合结构文字。这bug in vet was fixed six months ago。我与GCloud支持分享了我的发现,他们已经向我保证他们正在使用它。作为一种解决方法,我让我的代码通过了过于严格的go vet过程。如果您的应用中包含一个包含main的子目录,则可以使用skip_files指令将其排除在app.yaml中:

skip_files:
- bench/.*
- testdata/.*

复合错误的修复涉及从此更改:

oidData = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 7, 1}

到此:

oidData = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1})