2016-02-24 2 views
4

Я вижу, что на этот вопрос уже есть answer, но я чувствую его устаревшее. С тех пор многое изменилось. Сейчас есть modules, cloud_endpoints и webapp2. Какая должна быть хорошая структура каталогов для моего проекта, которая позволяет мне легко добавлять/изменять функции.Новая структура проекта для Google App Engine

Например, я должен быть в состоянии управлять:

  1. модули.
  2. Работы Крон.
  3. Целевые очереди.
  4. Облачные конечные точки.
+1

Я бы также добавил сторонние библиотеки, которые потенциально могут использоваться более чем одним модулем и тестовым кодом. –

ответ

3

Я бы первый взглянуть на модулях, по крайней мере, по этим причинам:

  • модулей действительно во многом (почти) приравненный к целому (одномодульных) приложениям в старых Docs/ссылки, поэтому, когда позиция модуля в иерархии приложения уточняется, различные сообщения, ссылающиеся на контекст приложения, обычно могут быть экстраполированы только в контексте только для модулей.
  • в настоящее время приложение может использовать различные языки/песочницы для различных модулей (см Run both Java and PHP on google app engine project) или даже для разных версий одного и того же модуля (см Google App Engine upgrading part by part)

Лично я бы придерживаться the recommended мульти-модульной структурой приложения - каждый модуль имеет свой собственный каталог, один уровень ниже директории приложения:

enter image description here

топ реж для приложения будет держать за приложение конфиги (которые не применимы к конкретному модулю): dispatch.yaml, cron.yaml, index.yaml, и queue.yaml. Обратите внимание, что определения cron-заданий и определения очередей задач принадлежат здесь (но ничто не мешает вам маршрутизировать/отправлять различные задания cron на различные модули на основе запрошенных путей).

Я бы также разместил на верхнем уровне приложения все файлы/каталоги, которые я хотел бы разделить на несколько модулей по DRY. Эти файлы/dirs будут совместно использоваться модулем, символизируя их внутри соответствующих модулей, чтобы модуль получал свою собственную копию при развертывании. Почти ничего, что может существовать в виде отдельного файла или каталога могут быть разделены таким образом:

Наконец рекомендуемые файлы/реж структура конкретного модуля может также зависеть от языка модуля/песочницы, рамки (ов), девелопер стиль/предпочтение и т.д. Я не подумайте, что можно дать рекомендацию об одном размере, которая была бы эффективной/приемлемой во всех случаях.

+0

Где разместить конечные точки? – vivek

+0

Я еще не использовал Endpoints, поэтому возьмите это с солью - на основе краткого сканирования документов. Поскольку конечные точки включают код на стороне клиента, который не запускается в GAE, они не должны находиться под модулем dir (иначе код по умолчанию будет развернут в GAE). Я бы сказал, что бок о бок с модулями dirs или даже более чистым (особенно если приложение включает в себя несколько конечных точек) под некоторым «Endpoints» (?) Dir, размещенным бок о бок с dirs модулей. Оттуда symlink внутри всех применимых модулей, независимо от того, какие файлы/директории Endpoint необходимо развернуть для работы с бэкэнд (если есть). –

0

Конечные точки - это только RPC (строго типизированные) версии базовых URL REST с дополнительным преимуществом: может использовать для созданных библиотек на стороне клиента. Таким образом, конфигурация и определения конечной точки принадлежат в каталоге SAME как модуль (т. Е. Мобильный сервер), так как их REST-копия будет. Другими словами, если у вас есть (или будет) конечная точка REST в модуле 1 для «входа пользователя», тогда вы должны поместить конечную точку «пользовательский вход» в каталог module1. Кроме того, если вам не нравится подход symlink, вы можете переместить файл module1.yaml UP на один уровень, а затем весь модуль может импортировать из «общего» каталога.