Может ли служба / модуль по умолчанию в приложении Google App Engine быть братом по сравнению со стандартным по структуре папок?
Обновить: modules
называются services
Эти дни.
Я хотел бы организовать модули моего проекта в различные подпапки, где каждая подпапка содержит код, относящийся к каждому модулю. В частности, я хотел бы, чтобы папка, содержащая модуль по умолчанию, находилась на том же уровне, что и другие модули (то есть все они являются братьями и сестрами). Я следую схеме, показанной в документации по модулям:
Однако меня смущает утверждение " Важно: файл app.yaml должен находиться в корневом каталоге вашего приложения ". Означает ли это, что модуль по умолчанию (и его app.yaml) должен находиться в корневом каталоге проекта и, следовательно, быть родителем модулей не по умолчанию?
1 ответ
Модули могут быть все рядом. <module>.yaml
для каждого может быть внутри модуля dir.
Примечание о 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
файл, заботясь о buildin
маршрутизация модуля как в домене appspot, так и в моем пользовательском домене (все остальное автоматически направляется в модуль по умолчанию):
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"