根据文件夹结构,Google App Engine应用中的默认服务/模块可以是非默认服务/模块的兄弟吗?

更新: modules现在称为services

我想组织我的项目的模块到不同的子文件夹,其中每个子文件夹包含有关每个模块的代码。 特别是,我想包含默认模块的文件夹与其他模块在同一水平(即他们都是兄弟姐妹)。 我正在模块文档中显示的图表:

图

然而,让我感到困惑的是“ 重要:app.yaml文件必须位于应用程序的根目录中 ”。 这是否意味着默认模块(及其app.yaml)必须位于项目根目录中,因此是非默认模块的父代?

这些模块可以全部并排。 每个<module>.yaml<module>.yaml可以位于模块目录中。

有关app.yaml文件的说明是误导性的,它仅适用于单模块应用程序(许多文档未针对多模块应用程序进行更新)。

default模块的configuration文件甚至不必被称为app.yaml (或其default dir)。 我会保持应用程序级别的configuration文件( cron.yamldispatch.yamlqueue.yamlindex.yaml )在最高级别,最终将它们符合默认(或其他)模块(S)工具可能会抱怨)。

例如,下面是我的一个应用程序( main目录包含default模块)的结构:

 cron.yaml dispatch.yaml queue.yaml index.yaml main/cron.yaml -> ../cron.yaml main/index.yaml -> ../index.yaml main/main.yaml main/queue.yaml -> ../queue.yaml buildin/buildin.yaml buildin/index.yaml -> ../index.yaml buildin/queue.yaml-> ../queue.yaml 

调用相关工具时只需要注意。 这是我的应用程序的小抄,从应用程序的目录执行,其中一些也反映在pycharm项目configuration(我在pycharm内运行的开发服务器):

 appcfg.py update main/main.yaml buildin/buildin.yaml appcfg.py update_dispatch . appcfg.py update_indexes -A <app-name> main appcfg.py update_cron -A <app-name> . appcfg.py update_queues -A <app-name> . 

运行devserver:

 dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml 

更新:按要求添加一些我的configuration文件。

dispatch.yaml文件负责处理appspot域和我的自定义域中的构build模块路由(其他一切都自动路由到默认模块):

 application: <my_app> dispatch: - url: "buildin.my_domain.com/*" module: buildin - url: "buildin-dot-my_app.appspot.com/*" module: buildin - url: "*/buildin/*" module: buildin 

main.yaml文件:

 application: my_app module: default version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /(.*\.min\.css)$ static_files: stylesheets/\1 upload: stylesheets/.*\.min\.css$ secure: always - url: /(.*\.(ico|gif|png|jpg|svg))$ static_files: images/\1 upload: images/.*\.(ico|gif|png|jpg|svg)$ secure: always - url: .* script: main.app secure: always libraries: - name: webapp2 version: "2.5.2" - name: jinja2 version: "2.6" - name: pycrypto version: "2.6" 

buildin.yaml文件:

 application: my_app module: buildin version: 1 runtime: python27 api_version: 1 threadsafe: true instance_class: B2 handlers: - url: /(.*\.min\.js)$ static_files: scripts/\1 upload: scripts/.*\.min\.js$ secure: always - url: /(.*\.min\.css)$ static_files: stylesheets/\1 upload: stylesheets/.*\.min\.css$ secure: always - url: /(.*\.(ico|gif|png|jpg|svg))$ static_files: images/\1 upload: images/.*\.(ico|gif|png|jpg|svg)$ secure: always - url: /buildin/cron* script: buildin.app login: admin - url: .* script: buildin.app secure: always libraries: - name: webapp2 version: "2.5.2" - name: jinja2 version: "2.6" - name: pycrypto version: "2.6"