使用 App Engine golang 柔性环境,测试时访问 app.yaml
Using App Engine golang flexible environment, accesing app.yaml while testing
我正在将 golang 服务从 App Engine 标准环境移植到灵活环境,并且有一个关于在 development/testing 期间访问 app.yaml 的问题。
在我的 app.yaml 中,我有一个设置环境变量的部分,稍后我通过 os.GetEnv(...) 在代码中访问它:
env_variables:
FORGE_CLIENT_ID: 'my-client-id'
FORGE_CLIENT_SECRET: 'my-client-secret'
在 App Engine 标准环境中,这运行良好,因为我正在使用 App Engine 开发服务器 dev-server.py
,我相信它负责读取 app.yaml 文件并制作这些环境变量可用。
然而,在开发期间的灵活环境中,服务仅通过 go run *.go
启动,应用程序似乎没有在 app.yaml 中获取任何信息,这意味着我收到错误我的环境变量没有设置。
我知道app.yaml是在灵活环境部署时使用的,但我不明白在开发中如何使用或是否使用它。如何从我的开发服务器访问这些环境变量?
谢谢。
你需要if/else根据dev和live的区别,然后你可以简单地解析yaml文件来获取和设置这些变量。例如,我的一项服务(仍然是 运行 在标准思想上)仍在使用旧的 SDK,其中 yaml 中需要版本。我这样解析它:
import "github.com/ghodss/yaml" // or your choice
type AppVersion struct {
Version string `json:"version"`
}
func VersionID() (string, error) {
dat, err := ioutil.ReadFile("app.yaml")
if err != nil {
return "", err
}
a := &AppVersion{}
err = yaml.Unmarshal(dat, a)
if err != nil {
return "", err
}
return a.Version, nil
}
显然,这随后会存储在全局文件中,因此我不必每次都打开该文件,但如果仅在本地开发人员上解析它并不重要。 os.SetEnv
最适合您的情况。这只是一种适合我的解决方案。
对于 Google App Engine 灵活,开发服务器不使用 "app.yaml",因为配置是在本地设置的。解决方法是在 运行 开发服务器之前设置环境变量。您可以检查此 question 以仅针对该命令设置这些变量。
我正在将 golang 服务从 App Engine 标准环境移植到灵活环境,并且有一个关于在 development/testing 期间访问 app.yaml 的问题。
在我的 app.yaml 中,我有一个设置环境变量的部分,稍后我通过 os.GetEnv(...) 在代码中访问它:
env_variables:
FORGE_CLIENT_ID: 'my-client-id'
FORGE_CLIENT_SECRET: 'my-client-secret'
在 App Engine 标准环境中,这运行良好,因为我正在使用 App Engine 开发服务器 dev-server.py
,我相信它负责读取 app.yaml 文件并制作这些环境变量可用。
然而,在开发期间的灵活环境中,服务仅通过 go run *.go
启动,应用程序似乎没有在 app.yaml 中获取任何信息,这意味着我收到错误我的环境变量没有设置。
我知道app.yaml是在灵活环境部署时使用的,但我不明白在开发中如何使用或是否使用它。如何从我的开发服务器访问这些环境变量?
谢谢。
你需要if/else根据dev和live的区别,然后你可以简单地解析yaml文件来获取和设置这些变量。例如,我的一项服务(仍然是 运行 在标准思想上)仍在使用旧的 SDK,其中 yaml 中需要版本。我这样解析它:
import "github.com/ghodss/yaml" // or your choice
type AppVersion struct {
Version string `json:"version"`
}
func VersionID() (string, error) {
dat, err := ioutil.ReadFile("app.yaml")
if err != nil {
return "", err
}
a := &AppVersion{}
err = yaml.Unmarshal(dat, a)
if err != nil {
return "", err
}
return a.Version, nil
}
显然,这随后会存储在全局文件中,因此我不必每次都打开该文件,但如果仅在本地开发人员上解析它并不重要。 os.SetEnv
最适合您的情况。这只是一种适合我的解决方案。
对于 Google App Engine 灵活,开发服务器不使用 "app.yaml",因为配置是在本地设置的。解决方法是在 运行 开发服务器之前设置环境变量。您可以检查此 question 以仅针对该命令设置这些变量。