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"