在app.yaml上指定的环境变量,但未在main.go上获取

我已经在app.yaml中指定了我的环境变量,当我在本地计算机上运行它时会获取它,但是一旦部署它,就不会获取它。

这是我的设置方法:

application: some-application

version: 1

runtime: go

api_version: go1

threadsafe: true

handlers:

- url: /.*

script: main.go

secure: always

env_variables:

ENVIRONMENT_VAR1: 'some key'

ENVIRONMENT_VAR2: 'some key'

ENVIRONMENT_VAR3: 'some key'

而且我正在使用os.Getenv("ENVIRONMENT_VAR1")检索密钥,并且当我在本地运行它时它可以工作,但是在Google App

Engine上部署时却无法工作。

回答:

它在官方文档中没有记录:定义环境变量,但是在调用函数app.yaml之前不会设置生产环境中定义的环境变量init()。仅在处理第一个请求之前设置它们。

在此报告了此问题。引用AppEngine工程师的答案:

对。由于实现的性质,不幸的是,环境变量在init函数中不可用。尽管它们不与请求绑定,但是直到所有init函数都已运行之后才设置它们,而是在处理第一个请求之前设置它们。

结果,您可以在主处理程序中使用sync.DoOnce来执行基于环境变量的值所需的任何操作,因为此时将正确设置该变量。

通过以下示例实现此目的Once.Do()

var once = sync.Once{}

func MainHandler(w http.ResponseWriter, r *http.Request) {

once.Do(mysetup)

// do your regular stuff here

}

func mysetup() {

// This function is executed only once. Read / use env vars here.

var1 := os.Getenv("ENVIRONMENT_VAR1")

_ = var1 // use var1

}

以上是 在app.yaml上指定的环境变量,但未在main.go上获取 的全部内容, 来源链接: utcz.com/qa/403334.html

回到顶部