2017-02-09 1 views
0

init() 함수에 내 자동 크기 조절 된 응용 프로그램의 VersionID를 가져 오는 방법이 Context없이 있습니까? 유일한 옵션은 appengine.VersionID(context.Context) 인 것 같습니다. 수동으로 축척 된 인스턴스는 /_ah/start이 시작될 때 호출되어 (Context에 대한 액세스 권한 부여) 자동 확장 인스턴스에 대해서는 이와 같은 것이 없습니다.Go App Engine에서 Context없이 init()에서 버전을 가져 오십시오.

생성 된 ID가 appengine.VersionID 인 경우 app.yaml 버전 만 반환하므로 걱정하지 않아도됩니다.

편집 : 컨텍스트 비트 : x-x-x-dev 또는 x-x-x-dev 형식으로 버전을 배포하고 데이터베이스 연결을 버전 접미사에 의존해야합니다. 이렇게하면 GCP 콘솔을 볼 때 모듈/서비스가 어떤 데이터베이스를 사용하고 있는지 확인할 수 있습니다. 물론 Context에 액세스 할 수없는 init()에 DB 연결 풀을 설정했습니다.

답변

0

어디서나 온라인으로 답변을 검색하고 검색하므로 여기 있습니다.

init() 함수에서 app.yaml 파일을 구문 분석하기 만하면됩니다. 여기 나의 예제는 yaml 파싱 패키지를 사용하지만 필요하다면 좀 더 가볍게 수행 할 수있다. 이 appengine.VersionID()가하는 형태의 X · Y에 생성 된 ID를 반환하지 않는

import "github.com/ghodss/yaml" 

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 
} 

참고. 버전의 X 부분 만.

Github의 appengine repo에서 appengine.VersionID의 실제 호출에는 Context이 필요하지만 내부적으로는 nil이라는 내부 패키지를 호출합니다. 따라서 그들은 기본적으로 Context으로 전화하도록 강요하지만 실제로 사용되지는 않습니다. 믿을 수 없을 정도로 화를 내고 있습니다.

관련 문제