【问题标题】:Pass environment variables to GAE instance将环境变量传递给 GAE 实例
【发布时间】:2018-09-29 00:02:27
【问题描述】:

我正在使用 GAE 来部署我的应用程序,并且我有一些环境变量想要传递给我的 GAE 实例。比如我每次使用DB时,unix socket的赋值目前是这样的:

unix_socket='<my_path_to_my_sockets>/{instance}'
.format(instance=properties.get_property('data.instance'))

这很好,但问题是它是一个共享代码,每次有人进行本地测试时,它都会更改路径并将更改推送到存储库。当有人拉新更改时,它需要更改以发出数据库请求,因为每个人都有不同的套接字更改路径。所以我创建了以下语句:

unix_socket= (os.environ['CLOUDSQL_INSTANCES_DIR'] 
if 'CLOUDSQL_INSTANCES_DIR' in os.environ 
else '/home/cpinam/cloudsql/') 
   + properties.get_property('cloud.instance')

因此,如果有人在其系统中具有环境变量,那么它会使用该变量并避免使用绝对路径。问题是这个环境变量指的不是我的电脑而是GAE实例

问题是,我怎样才能使用我的环境变量而不是服务器实例的任何环境变量?可能吗?

PS:我知道我可以通过 app.yaml 文件传递​​环境变量,但这意味着要修改该文件。

谢谢

【问题讨论】:

  • 在 gae 实例中引用环境变量是正确的行为,否则您希望它如何在生产服务器中工作?人们是否自定义安装 cloudsql 目录?不是默认安装会放在同一个位置吗?
  • @marcadian 只有在本地开发下才需要环境变量。问题是代码引用的是 gae 环境变量而不是我的局部变量,我想同时引用这两个变量

标签: python google-app-engine environment-variables


【解决方案1】:

目前可以使用原始 App Engine SDK 的 appcfg.py 命令进行部署。据我所知,使用 gcloud App Engine 部署是不可能的。

您可以在 app.yaml 文件中定义默认环境变量:

env_variables:
  HOST_NAME: ''

使用 appcfg.py 命令的 -E 选项传递您的环境变量 -

   -E NAME:VALUE. Ex : -E HOST_NAME:WOAH

-E 描述:设置一个环境变量,可能会覆盖 app.yaml 文件中的一个 env_variable 值(可以重复标记以设置多个变量)。

【讨论】:

    【解决方案2】:

    App Engine 不支持您想要的方式。

    您可能需要考虑一些替代方法。听起来您的主要限制是希望使各个开发人员能够将替代配置存储到他们可能在生产中找到的配置。您可能需要考虑允许开发人员将上述配置存储在他们的本地 Datastore 实例中。

    您的代码如下所示:

    if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
      unix_socket = os.environ['CLOUDSQL_INSTANCES_DIR'] 
      ...
    else:
      unix_socket = your_configuration_type.get("CLOUDSQL_INSTANCES_DIR")
      ...
    

    另一种选择是使用here 概述的方法,您可以将相关的环境变量存储在您自己的client_secrets.json 版本中,并确保该文件列在.gitignore 中。

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 1970-01-01
      • 2013-12-29
      • 2021-09-05
      • 2020-03-27
      • 2017-03-30
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多