为了账号安全,请及时绑定邮箱和手机立即绑定

无法在基仕伯中指定标志

无法在基仕伯中指定标志

慕工程0101907 2022-09-12 16:22:29
我有一个Go服务器程序,需要在运行时传递一个特定的gflag值,但我无法在GCP的app.yaml文件中指定它。我对 GCP 很陌生,所以这可能是一个不方便的查询。这是我的 Go 代码结构:project_root   |   |___cmd        |___ main                |___ main.go                |___ foo_handlers.go (defines FooHandler(w, r))                |___ bar_handlers.go (defines BarHandler(w, r))main.go 是典型的戈兰 HTTP 服务器程序,大致具有以下结构:func main() {    // Flags    flag.StringVar(        &SomeFlagVar,         "some_flag", // flag name        "dev_value", // default value        "Some Flag")    flag.Parse()    // Foo    http.HandleFunc("/foo", FooHandler)    // Bar    http.HandleFunc("/bar/", BarHandler)    // Server starting boiler plate code    http.ListenAndServe(..)我的 GCP 应用程序.yaml 文件大致如下所示:runtime: go114main: ./cmd/mainhandlers:- url: /.*  script: auto这工作正常,但正如你所注意到的,我无法将任何自定义值传递给标志。现在,我只是将默认标志值硬编码为在 GCP 中部署的首选值,并且我不会检查该更改,这显然是实现目标的一种非常粗糙的方法。some_flag我已尝试将配置设置为:或entrypointentrypoint: ./cmd/main/main --some_flag=gcpentrypoint: .bin/main --some_flag=gcp但是对于这两种情况,GCP都会出错,并带有表单的错误。/bin/sh: 1: exec: bin/main: not found我可以通过指定一个网络测功机,在Heroku中非常容易地实现相同的目标,如下所示: bin/main --some_flag=heroku如何在 GCP 应用中进行相同的设置?我正在使用 GCP 标准环境。我不想使用相同的环境变量。谢谢!
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您无法使用应用引擎将标志传递给主函数。您有 3 种解决方案:

  1. 坚持使用应用引擎标准,并使用环境变量而不是标志

  2. 使用具有自定义运行时的灵活应用引擎。这样,您必须提供 Docker 文件,因此您可以指定所需的入口点。但是,应用程序引擎的灵活性不能扩展到0,因此对于小型和低流量的应用程序来说非常昂贵

  3. 作为“应用引擎灵活”,请定义一个 Docker 文件,但这次将其部署在云上运行。

就个人而言,我建议使用环境变量,因为如果要更改值,则不必重新构建容器,只需更改值并部署新修订版本(相同的容器,但不同的上下文)


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号