【问题标题】:How to set variables based on project id?如何根据项目ID设置变量?
【发布时间】:2016-03-23 17:14:29
【问题描述】:

我目前有一个包含 2 个项目的 App Engine Go 应用:myapp-prodmyapp-staging

我希望能够根据应用是在 prod 还是 staging 中运行来设置某些变量的值。

有没有办法让应用检测它在哪个环境中运行?

谢谢

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

    您可以使用appengine.AppID() 函数来获取您的应用程序的名称/ID:

    // AppID returns the application ID for the current application.
    // The string will be a plain application ID (e.g. "appid"), with a
    // domain prefix for custom domain deployments (e.g. "example.com:appid"). 
    func AppID(c Context) string
    

    您可以使用appengine.IsDevAppServer() 来判断您的应用是在开发模式(使用 AppEngine SDK)还是实时(在生产中)运行:

    // IsDevAppServer reports whether the App Engine app is running in the
    // development App Server. 
    func IsDevAppServer() bool
    

    或者你也可以使用appengine.ServerSoftware(),它包含上述两个信息,合并成一个字符串:

    // ServerSoftware returns the App Engine release version.
    // In production, it looks like "Google App Engine/X.Y.Z".
    // In the development appserver, it looks like "Development/X.Y". 
    func ServerSoftware() string
    

    【讨论】:

    • 谢谢 我试试 AppID()。 IsDevAppServer() 在这种情况下不起作用,因为我试图区分在不同项目上运行 myapp-prodmyapp-staging 两者都不是在开发模型中运行。
    • @sthomps 是的,我知道,我提到它是因为它很相关并且可能对其他人有用。
    【解决方案2】:

    使用environment variable 描述您的应用是处于生产还是暂存状态。添加到app.yml,

    env_variables:
      ENVIRONMENT: 'production'
    

    在您的代码中,

    import "os"
    
    if v := os.Getenv("ENVIRONMENT"); v == "production" {
      // You're in production
    }
    

    【讨论】:

    • 有没有办法从命令行而不是在 app.yml 中设置环境变量?否则,没有真正的好方法可以知道我的应用程序是在项目“myapp-prod”还是“myapp-staging”中运行
    • 请注意,appcfg.py 提供以下参数选项: -E NAME:VALUE, --env_variable=NAME:VALUE 设置环境变量,可能会覆盖 app.yaml 文件中的 env_variable 值(标志可以重复设置多个变量)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2022-01-10
    相关资源
    最近更新 更多