Может ли служба / модуль по умолчанию в приложении 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"
Другие вопросы по тегам