Может ли служба / модуль по умолчанию в приложении Google App Engine быть дочерним элементом нестандартного по структуре папок?

Обновление: в наши дни modules называются services .

Я хотел бы организовать модули моего проекта в разные подпапки, где каждая подпапка содержит код, относящийся к каждому модулю. В частности, я хотел бы, чтобы папка, содержащая модуль по умолчанию, была на том же уровне, что и другие модули (т. Е. Все они братья и сестры). Я следую диаграмме, приведенной в документации модhive :

диаграмма

Однако меня смущает утверждение « Важно: файл app.yaml должен находиться в корневом каталоге вашего приложения ». Означает ли это, что модуль по умолчанию (и его app.yaml) должен находиться в корневом каталоге проекта и, следовательно, быть родителем нестандартных модhive?

Модули могут быть рядом друг с другом. .yaml для каждого из них может находиться внутри модуля dir.

Заметка о файле app.yaml вводит в заблуждение, она действительно применима только к приложениям с одним модулем (многие части документации не были обновлены для многомодульных приложений).

Конфигурационный файл модуля по default даже не нужно называть app.yaml (или его dir по 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  main appcfg.py update_cron -A  . appcfg.py update_queues -A  . 

Чтобы запустить devserver:

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

Обновление: добавлены некоторые из моих конфигурационных файлов по запросу.

Файл dispatch.yaml , заботясь о buildin модуля buildin как в домене appspot, так и в моем пользовательском домене (все остальные автоматически перенаправляются на модуль по умолчанию):

 application:  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" 
  • Как установить определенную версию набора модhive Perl?
  • Как использовать модуль для float / double?
  • Понимание оператора модуля%
  • addr2line на модуле ядра
  • Что происходит, когда модуль импортируется дважды?
  • DexIndexOverflowException только при выполнении тестов
  • Быстрый способ вычисления n! mod m, где m - простое число?
  • Как установить модуль CPAN в локальный каталог?
  • Как вы используете данные модуля Fortran 90
  • В чем разница между новыми Some :: Class и Some :: Class-> new () в Perl?
  • Использовать requirejs и jquery, не сбивая глобальный jquery?
  • Interesting Posts

    Объявление указателей; звездочку слева или справа от пространства между типом и именем?

    Возможно ли выполнить команды adb через приложение для Android?

    Ссылка на RTSP youtube

    Как я могу подсчитать цифры в целых числах без строки?

    Может ли видеовидео воспроизводить видео, хранящееся на внутреннем хранилище?

    В чем разница между Debug и Release в Visual Studio?

    Рефакторинг с C ++ 11

    Как запустить Java-программу в терминале с внешней библиотекой JAR

    Как объяснить обратные вызовы на простом английском языке? Как они отличаются от вызова одной функции от другой функции?

    LINQ to Entities не распознает метод «Double Parse (System.String)», и этот метод не может быть переведен в выражение хранилища

    Как импортировать файл .aar в Android Studio 1.1.0 и использовать его в моем коде

    Force GCC уведомлять о неопределенных ссылках в разделяемых библиотеках

    Как удалить все строки из всех таблиц в базе данных SQL Server?

    Как узнать, что карта готова к использованию при использовании SupportMapFragment?

    Как создать уведомление в качелях

    Давайте будем гением компьютера.