services new google engine create app google-app-engine module

google-app-engine - new - microservices google app engine



¿Puede un servicio/módulo predeterminado en una aplicación Google App Engine ser un hermano de uno no predeterminado en términos de estructura de carpetas? (1)

Actualización: los modules se denominan services estos días.

Me gustaría organizar los módulos de mi proyecto en varias subcarpetas, donde cada subcarpeta contiene el código correspondiente a cada módulo. En particular, me gustaría que la carpeta que contiene el módulo predeterminado esté en el mismo nivel que otros módulos (es decir, todos son hermanos). Estoy siguiendo el diagrama que se muestra en la documentación de los módulos :


(fuente: google.com )

Sin embargo, lo que me confunde es la declaración " Importante: el archivo app.yaml debe ubicarse en el directorio raíz de su aplicación ". ¿Esto implica que el módulo predeterminado (y su app.yaml) debe estar en el directorio raíz del proyecto y, por lo tanto, ser el padre de los módulos no predeterminados?


Todos los módulos pueden estar uno al lado del otro. El <module>.yaml para cada uno puede estar dentro del directorio del módulo.

La nota sobre el archivo app.yaml es engañosa, realmente se aplica solo a las aplicaciones de un solo módulo (muchas partes de la documentación no se actualizaron para las aplicaciones de varios módulos).

El archivo de configuración del módulo default ni siquiera tiene que llamarse app.yaml (o su directorio se llama default ). Mantendría los archivos de configuración de nivel de aplicación ( cron.yaml , dispatch.yaml , queue.yaml e index.yaml ) en el nivel superior, y eventualmente los vincularé a los módulos predeterminados (u otros) según sea necesario (algunos las herramientas pueden quejarse de otra manera).

Aquí está, por ejemplo, la estructura que obtuve para una de mis aplicaciones (el directorio main contiene el módulo 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

Solo debe prestar atención al invocar las herramientas relacionadas. Esta es mi hoja de trucos para esa aplicación, ejecutada desde el directorio de la aplicación, parte de ella también se refleja en la configuración del proyecto pycharm (estoy ejecutando el servidor de desarrollo dentro de 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> .

Para ejecutar el servidor de desarrollo:

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

Actualización: agregué algunos de mis archivos de configuración, según lo solicitado.

El archivo dispatch.yaml , que se encarga del enrutamiento del módulo buildin tanto en el dominio de appspot como en mi dominio personalizado (todo lo demás se enruta automáticamente al módulo predeterminado):

application: <my_app> dispatch: - url: "buildin.my_domain.com/*" module: buildin - url: "buildin-dot-my_app.appspot.com/*" module: buildin - url: "*/buildin/*" module: buildin

El archivo 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"

El archivo 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"