在 Linux 上使用 gaction 更新 Google Home/Assistant 包时 Golang 运行时出现崩溃?

Golang runtime panic when using gaction on Linux to update Google Home/Assistant package?

我正在尝试使用本教程中的说明在 Linux 14.04 LTS 机器(不是 Windows)上构建我的第一个 Google 家庭应用程序:

https://medium.com/google-cloud/building-your-first-action-for-google-home-in-30-minutes-ec6c65b7bd32

我的应用程序部署到 Google 云成功。但是,当我到达您使用模拟器测试您的应用程序的部分时,以下 gactions 命令失败并显示消息 "No help topic for preview/simulate"

$ gactions preview --action_package action.json --invocation_name "three doors" --preview_mins 1234

No help topic for 'preview'

并且:

$ gactions simulate

No help topic for 'simulate'

然后我尝试在此处切换到模拟器的 Google 操作说明:

https://developers.google.com/actions/tools/simulator

该文档指示我使用以下命令上传我的 Actions 项目:

$ gactions update --action_package action.json --project three-doors-9898

但这会导致 Golang 崩溃并出现以下堆栈跟踪:

    panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x506df6]

goroutine 1 [running]:
github.com/urfave/cli.HandleAction.func1(0xc4200fd208)
    /usr/local/google/home/gkal/code/go/src/github.com/urfave/cli/app.go:478 +0x27a
panic(0x737b00, 0x960720)
    /usr/lib/google-golang/src/runtime/panic.go:491 +0x283
github.com/Jeffail/gabs.(*Container).Bytes(0x0, 0x0, 0x0, 0x3000100)
    /usr/local/google/home/gkal/code/go/src/github.com/Jeffail/gabs/gabs.go:459 +0x26
github.com/Jeffail/gabs.(*Container).String(0x0, 0xc420123350, 0x793672)
    /usr/local/google/home/gkal/code/go/src/github.com/Jeffail/gabs/gabs.go:483 +0x2b
main.getLocaleFromActionPackage(0xc4203a60a0, 0xb, 0xc4203a60a0)
    /usr/local/google/home/gkal/code/go/src/github.com/gkaldevrel/cli/gactions/gactions.go:605 +0xdf
main.commandUpdate.func1(0xc42008cf00)
    /usr/local/google/home/gkal/code/go/src/github.com/gkaldevrel/cli/gactions/gactions.go:726 +0x209
reflect.Value.call(0x717fa0, 0x7a9988, 0x13, 0x793011, 0x4, 0xc4200fd1c8, 0x1, 0x1, 0xc4200fd150, 0x788860, ...)
    /usr/lib/google-golang/src/reflect/value.go:434 +0x906
reflect.Value.Call(0x717fa0, 0x7a9988, 0x13, 0xc4200fd1c8, 0x1, 0x1, 0x614896, 0x7930f1, 0x4)
    /usr/lib/google-golang/src/reflect/value.go:302 +0xa4
github.com/urfave/cli.HandleAction(0x717fa0, 0x7a9988, 0xc42008cf00, 0x0, 0x0)
    /usr/local/google/home/gkal/code/go/src/github.com/urfave/cli/app.go:487 +0x17a
github.com/urfave/cli.Command.Run(0x793732, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a4928, 0x4b, 0x0, ...)
    /usr/local/google/home/gkal/code/go/src/github.com/urfave/cli/command.go:191 +0x9fd
github.com/urfave/cli.(*App).Run(0xc420001080, 0xc42000e0c0, 0x6, 0x6, 0x0, 0x0)
    /usr/local/google/home/gkal/code/go/src/github.com/urfave/cli/app.go:240 +0x57d
github.com/urfave/cli.(*App).RunAndExitOnError(0xc420001080)
    /usr/local/google/home/gkal/code/go/src/github.com/urfave/cli/app.go:257 +0x53
main.main()
    /usr/local/google/home/gkal/code/go/src/github.com/gkaldevrel/cli/gactions/gactions.go:157 +0xa02

下面是我的包文件(action.json),我用 JSON 验证器验证了它:

{
    "versionLabel": "1.0",
    "agentInfo": {
        "languageCode": "en-US",
        "projectId": "three-doors-9898",
        "voiceName": "male_1"
    },
    "actions": [{
        "description": "Launch intent",
        "initialTrigger": {
            "intent": "assistant.intent.action.MAIN"
        },
        "httpExecution": {
            "url": "https://us-central1-three-doors-9898.cloudfunctions.net/three_doors"
        }
    }]
}

如何解决此问题并让我的 Google Home/Assistant 应用正常运行?

更新:我使用的 gactions 版本来自这里:

我用这个页面的Linux/x86_64link得到它:

https://developers.google.com/actions/tools/gactions-cli

这可能是我系统的错误版本吗?我是 运行 Ubuntu 14.04 LTS,64 位版本。

我的猜测是 github.com/gkaldevrel/cli/gactions/gactions.go:605 在指向 gabs.Container

的空指针上调用 .String()

github.com/gkaldevrel/cli 包似乎不是 public,所以我不能确定,但​​通过跟踪堆栈跟踪并从不同的推断https://github.com/Jeffail/gabs/blob/master/gabs.go 的 gabs.go 版本,似乎 gabs.Container 有一个 func (g *Container) Bytes 方法试图取消引用 g 并且因为它是零而恐慌。

有一个新的 gactions 版本可用。尝试 gactions selfupdate

如果因为版本损坏而无法正常工作,请下载 old version 和 运行。这个旧版本然后更新到 2.1.1,一切都恢复正常了。