将环境变量传递给 GAE 实例



我正在使用 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文件传递环境变量,但这意味着要修改文件。

谢谢

App Engine 不支持您想要的方式

。您可能需要考虑几种替代方法。听起来您的主要约束是希望使各个开发人员能够存储他们在生产中可能找到的替代配置。您可能需要考虑允许开发人员将所述配置存储在其本地数据存储实例中。

您的代码如下所示:

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")
...

另一种选择是此处概述的方法,您将相关的 env var 存储在您自己的client_secrets.json版本中,并确保该文件列在.gitignore中。

目前可以使用原始 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值(可以重复标记以设置多个变量)。

最新更新