【发布时间】:2016-03-23 17:14:29
【问题描述】:
我目前有一个包含 2 个项目的 App Engine Go 应用:myapp-prod 和 myapp-staging。
我希望能够根据应用是在 prod 还是 staging 中运行来设置某些变量的值。
有没有办法让应用检测它在哪个环境中运行?
谢谢
【问题讨论】:
标签: google-app-engine go
我目前有一个包含 2 个项目的 App Engine Go 应用:myapp-prod 和 myapp-staging。
我希望能够根据应用是在 prod 还是 staging 中运行来设置某些变量的值。
有没有办法让应用检测它在哪个环境中运行?
谢谢
【问题讨论】:
标签: google-app-engine go
您可以使用appengine.AppID() 函数来获取您的应用程序的名称/ID:
// AppID returns the application ID for the current application.
// The string will be a plain application ID (e.g. "appid"), with a
// domain prefix for custom domain deployments (e.g. "example.com:appid").
func AppID(c Context) string
您可以使用appengine.IsDevAppServer() 来判断您的应用是在开发模式(使用 AppEngine SDK)还是实时(在生产中)运行:
// IsDevAppServer reports whether the App Engine app is running in the
// development App Server.
func IsDevAppServer() bool
或者你也可以使用appengine.ServerSoftware(),它包含上述两个信息,合并成一个字符串:
// ServerSoftware returns the App Engine release version.
// In production, it looks like "Google App Engine/X.Y.Z".
// In the development appserver, it looks like "Development/X.Y".
func ServerSoftware() string
【讨论】:
myapp-prod 和 myapp-staging 两者都不是在开发模型中运行。
使用environment variable 描述您的应用是处于生产还是暂存状态。添加到app.yml,
env_variables:
ENVIRONMENT: 'production'
在您的代码中,
import "os"
if v := os.Getenv("ENVIRONMENT"); v == "production" {
// You're in production
}
【讨论】:
appcfg.py 提供以下参数选项: -E NAME:VALUE, --env_variable=NAME:VALUE 设置环境变量,可能会覆盖 app.yaml 文件中的 env_variable 值(标志可以重复设置多个变量)。