【问题标题】:Do I need to copy `skip_files` across multiple YAML files?我是否需要跨多个 YAML 文件复制“skip_files”?
【发布时间】:2016-01-23 06:32:41
【问题描述】:

我仍然对 appengine 模块部署过程一无所知。我的应用包含三个模块,我独立更新和部署。

我刚刚注意到,虽然我在 app.yaml 中为我的默认模块声明了 skip_files,但我的自定义模块仍在部署所有内容。所以我将 app.yaml 中的指令复制粘贴到自定义 YAML 文件中。虽然我认为不需要经常更改这些,但我仍然希望尽可能多地干燥。

有没有办法定义一次skip_files 并继承或引用这些指令?

【问题讨论】:

    标签: google-app-engine yaml


    【解决方案1】:

    GAE 将每个模块视为一个单独的独立应用程序,每个模块都在自己的实例中运行。在模块之间的 GAE 基础设施级别不共享应用程序可上传的工件。因此,如果我理解正确的话,甚至可以混合使用不同语言编写的模块。

    DRY Spirit 应用程序的文件或目录可以在源代码级别的模块之间“共享”,方法是将文件/目录的单个源副本符号链接到所有模块中。当应用程序部署到 GAE 中时,部署实用程序会用实际的符号链接目标内容替换符号链接。

    但是,符号链接方法不适用于文件级别以下的共享,例如文件中的部分。 DRY 仍可应用于 GAE 基础架构明确支持的配置文件的某些 select 部分。

    根据the documentationskip_files 部分恰好是此类受支持的部分之一:

    includes 指令允许你包含配置文件 适用于整个应用程序中的任何库或模块。例如, 您可能会包含一个用户管理库,如下所示:

    includes:
    - lib/user_admin.yaml
    

    ...和...

    使用包含仅检索以下类型的指令 目标文件(如果存在):

    • 内建
    • 包括
    • 处理程序
    • skip_files

    基于此,我认为您可以在应用的顶级目录中有一个 app_shared.yaml 文件,其中包含您的 skip_files 模式(小心覆盖默认值,顺便说一句),然后您可以包含在模块的 .yaml 文件中:

    includes:
    - app_shared.yaml
    

    您可能需要将 app_shared.yaml 符号链接到每个模块的目录(上述 DRY 方法),如果这是 the Modules Doc 中建议的模块的 .yaml 文件所在的位置。

    注意:我自己并没有实际使用包含方法,答案完全基于文档。

    【讨论】:

    • 对文档的精彩诠释!现在我正在看它,这很明显:) 非常感谢。
    • 实际上,现在我正在查看模块文档,我认为重新组织我的模块将完全消除共享skip_files 的需要:我所有的模块源文件都是混合的在各个目录中,所有 YAML 文件都位于顶级目录中。之所以这样,是因为我在深夜做了一个快速简单的模块化,直到现在都没有再考虑过。
    猜你喜欢
    • 2014-09-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多