在没有 App Engine 独立 SDK 的情况下检测 Go 中的开发应用服务器?
Detecting a development App Server in Go, without the App Engine standalone SDK?
Go 包,google.golang.org/appengine, provides IsDevAppServer which reports whether an App Engine app is running in the development App Server (e.g. localhost:8080
). However, this does not work unless the (deprecated) standalone SDK is used. See 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 服务器 运行 中实现此目标的推荐方法是什么?
App Engine 标准 Go 环境会自动设置一些环境变量。您可以查看列表 here.
您可以检查它们是否已设置,如果它们没有,那么您的代码运行正在本地(或至少未部署)。或者您可以在您的机器上将 NODE_ENV
环境变量设置为 development
(在您的 shell 中,您在本地 运行 您的应用程序,而不是在 app.yaml 文件中)并检查它的值。在 App Engine 上 运行ning 时,它将设置为 production
。
这听起来很棘手,但我发现元数据服务器也响应应用引擎标准。
此外,我使用了 cloud.google.com/go/compute/metadata
pacakge,
metadata.OnGCE()
快速检查它是在我的本地机器上还是在 google 的机器上(是的,它 returns 在 App Engine 上是正确的)
Go 包,google.golang.org/appengine, provides IsDevAppServer which reports whether an App Engine app is running in the development App Server (e.g. localhost:8080
). However, this does not work unless the (deprecated) standalone SDK is used. See 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 服务器 运行 中实现此目标的推荐方法是什么?
App Engine 标准 Go 环境会自动设置一些环境变量。您可以查看列表 here.
您可以检查它们是否已设置,如果它们没有,那么您的代码运行正在本地(或至少未部署)。或者您可以在您的机器上将 NODE_ENV
环境变量设置为 development
(在您的 shell 中,您在本地 运行 您的应用程序,而不是在 app.yaml 文件中)并检查它的值。在 App Engine 上 运行ning 时,它将设置为 production
。
这听起来很棘手,但我发现元数据服务器也响应应用引擎标准。
此外,我使用了 cloud.google.com/go/compute/metadata
pacakge,
metadata.OnGCE()
快速检查它是在我的本地机器上还是在 google 的机器上(是的,它 returns 在 App Engine 上是正确的)