【问题标题】:How do I run local GAE emulator with Go 1.12?如何使用 Go 1.12 运行本地 GAE 模拟器?
【发布时间】:2019-09-25 15:15:07
【问题描述】:

使用 Go 1.9,您可以使用“dev_appserver.py yaml”运行本地 GAE 模拟器

似乎 google-cloud-sdk/ 已弃用。

Go 1.12 文档说您可以使用“go run”在本地运行模拟器 https://cloud.google.com/appengine/docs/standard/go112/testing-and-deploying-your-app

我无法在以下位置运行演示应用程序:
google.golang.org/appengine/demos/helloworld

$ 运行 *.go

2019/09/25 10:57:27 INFO: Serving the front page.
panic: Metadata fetch failed for 'instance/attributes/gae_project': Get http://metadata/computeMetadata/v1/instance/attributes/gae_project: dial tcp: lookup metadata: no such host

goroutine 5 [running]:
google.golang.org/appengine/internal.mustGetMetadata(0x1474a38, 0x1f, 0x0, 0x0, 0x0)
    /Users/Steve/go/src/google.golang.org/appengine/internal/metadata.go:34 +0x18a
google.golang.org/appengine/internal.partitionlessAppID(0x0, 0xc0000304c0)
    /Users/Steve/go/src/google.golang.org/appengine/internal/identity_vm.go:112 +0xa2
google.golang.org/appengine/internal.DefaultTicket.func1()
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:294 +0x86
sync.(*Once).Do(0x17f0150, 0x1484448)
    /usr/local/go/src/sync/once.go:44 +0xb3
google.golang.org/appengine/internal.DefaultTicket(0xc0001945d0, 0x13b78e0)
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:289 +0x39
google.golang.org/appengine/internal.Call(0x14d9f00, 0xc0001945d0, 0x146a718, 0xa, 0x14666df, 0x5, 0x14d8ec0, 0xc0000304c0, 0x14d80c0, 0xc00000c1e0, ...)
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:496 +0x8ea
google.golang.org/appengine/internal.(*context).flushLog(0xc0001920c0, 0x1484b01, 0xc00002e100)
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:641 +0x3c7
google.golang.org/appengine/internal.handleHTTP.func1(0xc00002e120, 0xc0001920c0)
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:138 +0x56
created by google.golang.org/appengine/internal.handleHTTP
    /Users/Steve/go/src/google.golang.org/appengine/internal/api.go:134 +0x350
exit status 2

我做错了什么?

【问题讨论】:

    标签: go google-cloud-platform


    【解决方案1】:

    简短的回答是,从 Go 1.12 开始就没有适用于 App Engine 的模拟器。您将项目作为常规 Go 程序运行,因为在大多数情况下,现在它只是一个常规 Go 程序。

    helloworld 示例尚未更新以遵循 App Engine 上 Go 1.12 的新约定...特别是因为它位于旧的已弃用库中。您不再调用 appengine.Main,只需调用 http.ListenAndServe,就像您在 App Engine 之外通常所做的那样。

    他们已经(大部分)完成了一个完整的循环并打开了它,以便您在普通 Go 程序中使用的标准库调用现在可以在 App Engine 上使用,但有一些例外。这使得将几乎所有现有的独立 Go 程序推送到 App Engine 变得很容易,并且摩擦更少,这对他们来说是一个胜利,对开发人员来说也是一个胜利。

    即使您刚开始并没有从旧版 SDK 迁移,您也应该阅读本文,因为它概述了一些您需要注意和注意的开源库的变化,这些变化可能可能仍然是遗产。如果您正在迁移,它将特别有用。

    https://cloud.google.com/appengine/docs/standard/go112/go-differences

    值得注意的sn-p:

    App Engine 不再修改 Go 工具链以包含 appengine 包。如果您使用的是 appengine 包或 google.golang.org/appengine 包,则必须迁移到 Google Cloud 客户端库。

    【讨论】:

      【解决方案2】:

      也许已经晚了,但我使用的是 dev_appserver.py bla,bla,bla 但在gcloud components update 之后,脚本停止工作,但您仍然可以使用:

      go run .
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        相关资源
        最近更新 更多