I moduli possono essere tutti affiancati. Lo <module>.yaml
per ognuno può trovarsi nella dir del modulo.
La nota sul file app.yaml
è fuorviante, si applica in realtà solo alle app a modulo singolo (molte parti della documentazione non sono state aggiornate per app multi-modulo).
Il file di configurazione del modulo default
non deve nemmeno essere chiamato app.yaml
(o la sua dir chiamata default
). Manterrei i file di configurazione a livello di app (cron.yaml
, dispatch.yaml
, queue.yaml
e index.yaml
) al livello più alto, eventualmente collegandoli in modo simbolico ai moduli predefiniti (o ad altri) come necessario (alcuni strumenti potrebbero reclamare diversamente).
Ecco, per esempio, la struttura ho avuto modo di una delle mie applicazioni (la dir main
contiene il modulo 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
Hai solo bisogno di prestare attenzione quando si richiama i relativi strumenti. Questo è il mio cheat-sheet per quella app, eseguito dal dir della app, alcune delle quali si riflette anche nella configurazione di progetto PyCharm (sto correndo il server di sviluppo all'interno 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> .
Per eseguire il devserver :
dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml
Aggiornamento: aggiunti alcuni dei miei file di configurazione, come richiesto.
Il dispatch.yaml
di file, curando l'instradamento del modulo buildin
sia sul dominio AppSpot e il mio dominio personalizzato (tutto il resto viene instradato automaticamente al modulo predefinito):
application: <my_app>
dispatch:
- url: "buildin.my_domain.com/*"
module: buildin
- url: "buildin-dot-my_app.appspot.com/*"
module: buildin
- url: "*/buildin/*"
module: buildin
Il file 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"
Il buildin.yaml
del file:
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"
Grazie per il chiarimento e per aver fornito l'esempio insieme al cheat sheet. E 'molto utile. –
@dan, puoi incollare nel tuo codice dispatch.yaml + main/main.yaml + buildin/buildin.yaml? – WebQube
@Kevin Lee, non sono ancora in grado di capire come ottenere questo errore. google.appengine.api.yaml_errors.EventError: attributo 'dispatch' non previsto per l'oggetto di tipo AppInfoExternal. in "./app.yaml", riga 3, colonna 3 Per favore datemi un codice funzionante, se possibile. [email protected] –