我需要跨多个YAML文件复制`skip_files`吗?

时间:2015-10-23 16:21:12

标签: google-app-engine yaml

我仍然不了解appengine模块的部署过程。我的应用程序有三个模块,我可以独立更新和部署。

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

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

1 个答案:

答案 0 :(得分:2)

GAE将每个模块视为一个独立的独立应用程序,每个应用程序都在自己的实例中运行。模块之间的GAE infra级别不共享应用程序可上载工件。出于这个原因,如果我理解的话,甚至可以混合用不同语言编写的模块。

DRY精神应用程序的文件或目录中,可以"共享"在源代码级别的模块之间通过将文件/目录的单个源副本符号链接到所有模块中。将应用程序部署到GAE后,部署实用程序将使用实际的符号链接目标内容替换为符号链接。

然而,符号链接方法不适用于文件级别以下的共享,例如文件中的部分。 DRY仍可应用于GAE基础设施支持的选择部分配置文件明确

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

  

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

includes:
- lib/user_admin.yaml

...和...

  

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

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

基于此我想想您可以在应用的顶级目录中添加app_shared.yaml文件,其中包含您的skip_files模式(小心覆盖默认设置) ,BTW)然后你可以将它们包含在你的模块中。 .yaml个文件:

includes:
- app_shared.yaml

您可能需要将app_shared.yaml符号链接到每个模块的目录(上述DRY方法)中,如果这些模块位于模块中的话。 .yaml中建议存在 Runnable serverTask = new Runnable() { @Override public void run() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(DEFAULT_PORT); serverSocket.setReuseAddress(true); _working = true; while (_working) { Socket clientSocket = serverSocket.accept(); clientSocket.setSoTimeout(10000); clientProcessingPool.submit(new ClientTask(clientSocket)); } } catch (IOException e) { System.err.println("Unable to process client request"); e.printStackTrace(); } finally { try { if (serverSocket != null) { serverSocket.close(); } } catch (IOException e) { e.printStackTrace(); } } } }; Thread serverThread = new Thread(serverTask); serverThread.start(); private class ClientTask implements Runnable { private final Socket clientSocket; private ClientTask(Socket clientSocket) { this.clientSocket = clientSocket; } @Override public void run() { System.out.println("Got a client !"); try { System.out.println("Connected!"); DataOutputStream dOut = new DataOutputStream(clientSocket.getOutputStream()); DataInputStream dIn = new DataInputStream(clientSocket.getInputStream()); String request = dIn.readUTF(); parseRequest(request); System.out.println("request=" + request); dOut.writeUTF("Got the command"); dOut.flush(); // Send off the data dIn.close(); dOut.close(); clientSocket.close(); } catch (Exception e) { e.printStackTrace(); } } 个文件。

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