2010-11-09 5 views
6

en cours d'exécution cherrypy avec mod_wsgi sur Apache avec une autre application PHP. L'application cherrypy n'est PAS montée à la racine, mais plutôt sur quelque chose comme 'localhost/apps/myapp' via WSGIScriptAlias ​​dans le fichier de configuration apache.chemin cherrypy et relatif dans l'application WSGI

En testapp.py, j'ai essayé ce qui suit, et quand je tente d'accéder localhost/apps/myapp dans un navigateur:

app = cherrypy.tree.mount(MyApp(), '', 'settings.config') #FAILS WITH 404 

et

app = cherrypy.tree.mount(MyApp(), '/apps/myapp', 'settings.config') # WORKS 

Le premier cas échoue parce que cherrypy s'attend à être à la racine du serveur, plutôt que par rapport à l'endroit où il est monté via WSGI dans Apache.

Existe-t-il un moyen privilégié de faire fonctionner les applications cherrypy par rapport au chemin dans lequel elles sont montées dans apache sous WSGIScriptAlias? Fondamentalement, je vais exécuter plusieurs applications cherrypy sous plusieurs chemins différents, et préfèrerait que si apache géré le dispatching (c'est-à-dire cherrypy ne fonctionne que l'application et ne s'inquiète pas du chemin relatif). De cette façon, je peux éviter de mettre à jour plusieurs fichiers Python/fichiers de configuration différents chaque fois que certains des chemins relatifs sur le serveur changent.

Des suggestions?

BTW, l'application cherrypy est actuellement transmis à l'application wsgi comme suit:

app = cherrypy.tree.mount(HelloWorld(), '', 'settings.config') 
return app(environ, start_response) 

Répondre

1

que je fais cela, bien que cela nécessiterait cherrypy de connaître le chemin relatif:

class Dir: pass 
root = Dir() 
root.apps = Dir() 
root.apps.myapp = MyApp() 
cherrypy.tree.mount(root) 

Cette Cela me permet de structurer l'application de toutes les manières dont j'ai besoin. J'utilise nginx et non Apache, mais je ne pense pas que cela fera une différence. Bien que cela devienne un peu verbeux si vous utilisez de longs chemins avec pas grand chose d'autre entre les deux.

cherrypy peut prendre en charge other dispatchers qui pourrait être mieux adapté à ce que vous essayez de faire, ou peut-être vous avez besoin d'en écrire un personnalisé.