GAE app.yaml:如何设置包含句点的环境变量?

Posted

技术标签:

【中文标题】GAE app.yaml:如何设置包含句点的环境变量?【英文标题】:GAE app.yaml: How to set env variable that contains periods? 【发布时间】:2016-06-19 02:47:20 【问题描述】:

我正在使用 app.yaml 检出 GAE 托管的虚拟机,如此处所述https://cloud.google.com/appengine/docs/managed-vms/java/configuring-your-app-with-app-yaml

当我这样做时

env_variables:
  java.util.logging.config.file: 'WEB-INF/logging.properties'

我得到异常

google.appengine.api.yaml_errors.EventError: Value 'java.util.logging.config.file' for key in EnvironmentVariables does not match expression '^(?:[a-zA-Z_][a-zA-Z0-9_]*)$'

有没有办法通过app.yaml指定自定义logging.properties

【问题讨论】:

我仍然没有找到答案,但 gcloud-maven 插件源代码非常有用:github.com/GoogleCloudPlatform/gcloud-maven-plugin/tree/master/… 感谢 gcloud 团队的源代码! 【参考方案1】:

试试这个:

env_variables:
  JAVA_USER_OPTS: -Djava.util.logging.config.file=webapps/root/WEB-INF/logging.properties

app.yaml 中的env_variables 部分用于设置环境变量。点在它们的名字中是not allowed,所以这个例外是有道理的。

您正在尝试设置java.util.logging.config.file,这是一个系统属性,而不是环境变量。要设置它,您需要在启动 Java 时提供 -Djava.util.logging.config.file=<value> 参数。 GAE Flexible image 提供JAVA_USER_OPTS 环境变量来自定义Java 命令行,因此您可以使用它来自定义JUL 设置(现在也在图像readme 中推荐)。

另外,WEB-INF/logging.properties 值对我不起作用,因为当前目录是 $JETTY_BASE,而不是 $JETTY_BASE/webapps/root

【讨论】:

更正,注意这个JETTY_ARGS:-Djava.util.logging.config.file=WEB-INF/logging.properties github.com/GoogleCloudPlatform/…【参考方案2】:

另一个答案不再正确。属性名称现在命名为 JAVA_OPTS

这里有完整的“秘密”变量名 https://github.com/GoogleCloudPlatform/jetty-runtime#providing-loggingproperties-via-the-web-application

现在这是正确的设置:

env_variables:
  JAVA_OPTS: -Djava.util.logging.config.file=webapps/root/WEB-INF/logging.properties

【讨论】:

显然这也是不正确的。见github.com/GoogleCloudPlatform/…【参考方案3】:

对于普遍可用的柔性环境,请使用此格式。

env_variables:
  JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

见here。

【讨论】:

以上是关于GAE app.yaml:如何设置包含句点的环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 app.yaml 在 GAE(python) 中上传静态文件?

为子域配置 GAE 应用程序 app.yaml

使用 Flask-Restless 进行 GAE app.yaml 路由

如何在gae中部署django应用程序时包含migrate命令

如何在灵活的 GAE 应用程序中正确设置 JVM 选项

GAE 通过 app.yaml、python 装饰器或 users.get_current_user 强制登录?