Google App Engine 的新项目结构

New project structure for Google App Engine

我看到已经有 answer to this question but I feel its outdated. Many things have changes since then. There are now modules, cloud_endpoints and webapp2。我的项目的良好目录结构应该是什么,它允许我轻松 add/modify 功能。

例如我应该能够管理:

  1. 模块。
  2. Cron 作业。
  3. 任务队列。
  4. 云端点。

我会首先看一下模块,至少出于以下原因:

  • 模块在很多方面(几乎)等同于旧 docs/references 中的整个(单模块)应用程序,因此一旦模块在应用程序层次结构中的位置得到澄清,各种引用应用程序上下文的帖子就可以通常被推断为仅模块上下文。
  • 如今,一个应用程序可以为不同的模块使用不同的 languages/sandboxes(参见 Run both Java and PHP on google app engine project) or even for different versions of the same module (see

就我个人而言,我会坚持使用 the recommended 多模块应用程序结构 - 每个模块都有自己的目录,比应用程序目录低一级:

应用程序的顶级目录将包含每个应用程序的配置(不适用于特定模块):dispatch.yamlcron.yamlindex.yamlqueue.yaml.请注意,cron 作业和任务队列定义属于此处(但没有什么可以阻止您根据请求的路径 routing/dispatching 各种 cron 作业到各种模块)。

我还会将任何 files/directories 我想以 DRY 方式跨多个模块共享的任何内容放在应用程序的顶级目录中。这些 files/dirs 将由模块共享,方法是将它们符号链接到各自的模块中,以便模块在部署时获得自己的副本。几乎任何可以作为单独的文件或目录存在的东西都可以通过这种方式共享:

  • 模板、图像、脚本、CSS、宏、数据存储模型定义、python 模块 - 任何你需要的
  • 第 3 方库,例如
  • 甚至部分模块的 .yaml 配置!例如:

最后,特定模块的推荐 files/dir 结构可能进一步取决于模块 language/sandbox、使用的框架、开发人员的 style/preferences 等。我不不认为有可能提供一刀切的建议,在所有情况下都是 effective/acceptable。

端点只是基本 REST url 的 RPC(强类型)版本,具有额外的优势,即它们 可以 用于生成客户端库。因此,端点配置和定义与模块(即移动后端)属于 SAME 目录,就像它们的 REST 副本一样。换句话说,如果您在 "user login" 的 Module1 中有(或将有)REST 端点,那么您应该将 "user login" 端点放在 module1 目录中。此外,如果您不喜欢符号链接方法,您可以将 module1.yaml 文件向上移动一级,然后整个模块可以从 "common" 目录导入。