更新:modules
这些天被称为services
。
我想将项目的模块组织到各个子文件夹中,其中每个子文件夹包含与每个模块相关的代码。特别是,我希望包含默认模块的文件夹与其他模块处于同一级别(即它们都是兄弟姐妹)。我按照Modules documentation:
中显示的图表进行操作
然而,让我感到困惑的是陈述" Important: The app.yaml file must be located in your application's root directory"。这是否意味着默认模块(及其app.yaml)必须位于项目根目录中,因此是非默认模块的父模块?
答案 0 :(得分:16)
模块可以并排。每个<module>.yaml
可以在模块目录中。
关于app.yaml
文件的说明具有误导性,它实际上仅适用于单模块应用程序(许多文档未针对多模块应用程序进行更新)。
default
模块的配置文件甚至不必被称为app.yaml
(或其名为default
的目录)。我将应用级配置文件(cron.yaml
,dispatch.yaml
,queue.yaml
和index.yaml
)保留在顶层,最终将它们符号化为默认值(或其他)模块根据需要(某些工具可能会抱怨)。
例如,我在其中一个应用中使用的结构(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项目配置中(我在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
更新:根据要求添加了一些配置文件。
dispatch.yaml
文件,负责appspot域和我的自定义域上的buildin
模块路由(其他所有内容都自动路由到默认模块):
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"