我是不是需要跨多个 YAML 文件复制“skip_files”?

Posted

技术标签:

【中文标题】我是不是需要跨多个 YAML 文件复制“skip_files”?【英文标题】: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 并继承或引用这些指令?

【问题讨论】:

【参考方案1】:

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

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

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

根据the documentation,skip_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 文件都位于***目录中。之所以这样,是因为我在深夜做了一个快速简单的模块化,直到现在都没有再考虑过。

以上是关于我是不是需要跨多个 YAML 文件复制“skip_files”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将yaml文件拆分为多个文件?

我是不是需要将通过 CLI 提供的替换值添加到 cloud build.yaml 文件?

SLURM sbatch 是不是会自动跨节点复制用户脚本?

将多个 YAML 文件转换为 CSV

如何将值保存到 YAML 文件中? [复制]

pytest + yaml 框架 -8.一个yaml 文件可以支持多个用例了