使用 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 以仅针对该命令设置这些变量。