2014-06-09 1 views
1

[Après avoir creusé le problème, il semble que le problème ne concerne pas le routage mais l'utilisation des points de terminaison dans les modules. Nouvelle question à GAE Modules and Google EndpointsModules Google App Engine: Confusion sur le routage (dispatch.yaml)

Je migre une application GAE vers des modules, et je suis confus à propos du routage, car certaines requêtes sont correctement routées, mais pas toutes.

J'ai le message suivant: dispatch.yaml dans mon dossier racine. Notez que ce module api utilise l'API Google Cloud Enpoints

application: testapp 

dispatch: 
    - url: "*/foo/*" 
    module: foomodule 
    - url: "*/_ah/spi/*" 
    module: api 
    - url: "testapp.appspot.com/" 
    module: default 

Et puis un dossier par nom du module, chacun avec un fichier YAML, définissant les modèles d'URL avec des gestionnaires, par exemple /www/www.yaml pour mon module par défaut

application: testapp 
version: alpha 
runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: /static 
    static_dir: static 
- url: /.* 
    script: www.app 

libraries: 
- name: webapp2 
    version: latest 

requêtes telles que http://testapp.appspot.com/xxx sont correctement redirigés par défaut,/foo/xxx sont ceux qui sont gérées par le foomodule, mais les demandes de l'API (/ _ah/spi/xxx) aller vers le module par défaut avec un 404.

Cependant, je peux voir un 200 OK pour /_ah/spi/BackendService.logMessages dans les journaux de l'instance mappée au module api. Celui-ci vient de alpha-dot-api-dot-testapp.appspot.com - tandis que les 404 proviennent de testapp.appspot.com seulement. (NB: je voudrais que mes requêtes fonctionnent à partir de testapp.appspot.com)

Y a-t-il quelque chose que je fais de mal? Aussi, existe-t-il un moyen de lister la configuration actuellement utilisée sur le serveur pour s'assurer qu'il est correctement déployé?

+0

Avez-vous un gestionnaire '- url:/_ah/spi /' dans votre fichier api yaml? – GAEfan

+0

Oui, j'ai des gestionnaires: - url: /_ah/spi/.* script: myapi.app – apassant

+0

Avez-vous exécuté: 'appcfg.py mise à jour dispatch.yaml www.yaml api.yaml foo.yaml'? Et, dans api.yaml, at-il 'module: api'? Avez-vous des instances ouvertes qui s'exécutent sur le module api? Si c'est le cas, ils ont du code périmé - tuez-les et essayez à nouveau. – GAEfan

Répondre

2

Il est tentant de factoriser les points de terminaison api dans un module séparé et d'utiliser dispatch.yaml pour configurer les routes, mais avec dev_appserver.py, il semble que vous ne pouvez pas le faire. Basé sur le code: https://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/devappserver2/dispatcher.py?r=411#704

if (not path.startswith('/_ah/') or 
    any(path.startswith(wl) for wl 
     in DISPATCH_AH_URL_PATH_PREFIX_WHITELIST)): 
    return True 
else: 
    logging.warning('Skipping dispatch.yaml rules because %s is not a ' 
        'dispatchable path.', path) 
    return False 

tout chemin commençant par /_ah/ est pas un chemin dispatchable.