当前位置: 首页 > 知识库问答 >
问题:

将环境变量传递给GAE实例

洪季萌
2023-03-14

我正在使用GAE部署我的应用程序,我想把一些环境变量传递给我的GAE实例。例如,每次我使用DB时,unix套接字分配当前是这样的:

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

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

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:我知道我可以通过应用程序传递环境变量。yaml文件,但这意味着要修改该文件。

非常感谢。

共有2个答案

顾乐心
2023-03-14

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

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

env_variables:
  HOST_NAME: ''

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

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

-E说明:设置环境变量,可能会覆盖应用程序中的环境变量值。yaml文件(可重复该标志以设置多个变量)。

叶浩荡
2023-03-14

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

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

 类似资料:
  • 问题内容: 如何将主机环境变量(例如用户名和主机名)传递给dockerfile? 例如,如果我的用户名是: 如何编写Docker文件以获得相同的输出? 问题答案: 我遇到了同样的问题。我的解决方案是在docker-compose.yml内部提供变量,因为yml支持使用环境变量。 我认为这对我来说是最有效的方式,因为我不喜欢在命令行中使用类似以下内容一遍又一遍地键入它 在容器中,声明将无效,将设置为

  • 问题内容: 我是Docker的新手,目前尚不清楚如何从容器访问外部数据库。硬编码连接字符串的最佳方法是吗? 问题答案: 您可以使用该标志将环境变量传递到您的容器。 启动脚本的示例: 或者,如果您不希望在命令行中使用,等显示该值,则可以直接从当前环境中获取该值,如果您不带: 如果您有许多环境变量,尤其是要保密的话,可以使用env文件: --env-file标志将文件名作为参数,并期望每行采用VAR

  • 我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

  • 问题内容: 我必须从本地文件夹中的文件中读取一些属性。我需要在命令行中提供此文件路径。我给了它如下所述。但是有一个错误,它显示为 给出的命令是 有人可以帮我解决这个问题吗? 谢谢 问题答案: 尝试给出以下命令,

  • 我是第一次和docker合作,我正在努力弄清楚这一切。 在我正在进行的这个项目中,我们在启动文件中广泛使用了Windows环境变量。为了将这些内容放入配置中,我们使用AddEnvironmentVariables(string prefix)方法,如下所示: 在localhost和Azure中,这是没有问题的,因为我们已经将它们添加到了这些环境中。但是我不能想出如何在我的docker容器中配置这些

  • 问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。