1

Go 包google.golang.org/appengine提供IsDevAppServer报告 App Engine 应用程序是否正在开发应用程序服务器中运行(例如localhost:8080)。但是,除非使用(已弃用)独立 SDK ,否则这不起作用。有关实现,请参见appengine.go#L57

用 Go 编写的新 GAE 应用程序基本上是一个常规的 Web 服务器,可以像任何 Go 程序一样在本地编译和启动;

  • 老的; dev_appserver.py
  • 新的; go run main.go

在本地运行时,检测开发服务器有助于防止出现 CORS 问题:

func setDevHeaders(w http.ResponseWriter) {
    w.Header().Set("Access-Control-Allow-Origin", "http://localhost:4200")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    w.Header().Set("Access-Control-Request-Method", "POST, GET")
    w.Header().Set("Access-Control-Expose-Headers", "Content-Disposition")
}

需要时,我可以分支:

if appengine.IsDevAppServer() {
    setDevHeaders(w)
}

在 App Engine 上运行的独立 Go 服务器中实现此目的的推荐方法是什么?

4

2 回答 2

1

App Engine 标准 Go 环境会自动设置许多环境变量。您可以在此处查看列表。

您可以检查它们是否已设置,如果设置,则您的代码正在本地运行(或至少未部署)。或者您可以将NODE_ENV环境变量设置为development在您的机器上(在您本地运行应用程序的 shell 中,而不是在 app.yaml 文件中)并检查其值。production在 App Engine 上运行时将设置为。

于 2020-01-04T12:34:05.660 回答
0

这听起来很棘手,但我发现元数据服务器也响应应用引擎标准。

此外,我使用cloud.google.com/go/compute/metadata了pacakge,

metadata.OnGCE()

作为快速检查它是在我的本地机器上还是在谷歌的机器上(是的,它在应用引擎上返回 true)

于 2021-07-07T06:44:31.370 回答