J'ai créé une application web.py, et maintenant qu'il est prêt à être déployé, je souhaite exécuter non sur le serveur Web intégré de web.py. Je veux pouvoir l'exécuter sur différents serveurs Web, Apache ou IIS, sans avoir à changer de code d'application. C'est là que WSGI est censé entrer, si je le comprends correctement.
Cependant, je ne comprends pas ce que je dois faire pour rendre mon application déployable sur un serveur WSGI? La plupart des exemples supposent que vous utilisez Pylônes / Django / Autre-cadre, sur lequel vous avez simplement exécuté une commande magique qui corrige tout pour vous.
De ce que je comprends de la documentation Web.py (assez bref) Web.py, au lieu d'exécuter web.application (...). Exécuter () code>, je devrais utiliser
web.application (.. .). wsgifunc () code>. Et maintenant quoi? p>
3 Réponses :
Exactement ce que vous devez faire pour l'organiser avec un mécanisme d'hébergement de WSGI spécifique varie avec le serveur. P>
Pour le cas d'Apache / Mod_WSGI et de Pays Passager, il vous suffit de fournir un fichier de script WSGI contenant un objet appelé «application». Pour web.py 0.2, c'est le résultat d'appel web.wsgifunc () avec des arguments appropriés. Pour web.py 0.3, vous utilisez plutôt la fonction de membre wsgifunc () de l'objet renvoyé par web.application (). Pour plus de détails sur ceux-ci, voir Mod_WSGI Documentation: P>
http://code.google.com/p/modwsgi/wiki/integrationwithweby < / a> p>
Si, au lieu de cela, vous devez utiliser des adaptateurs FastCGI, SCGI ou AJP pour un serveur tel que LightPD, NGinx ou Cherokee, vous devez utiliser un package 'Flup' pour fournir un pont entre ces interfaces agnales et WSGI. Cela implique de faire appel à une fonction de fluillage avec le même objet d'application WSGI au-dessus de ce que quelque chose comme mod_wsgi ou passager de la phusion utiliserait directement sans avoir besoin d'un pont. Pour plus de détails sur ce point de vue: p>
http://trac.saddi.com/flup/wiki/flupspervers < / p>
La chose importante est de structurer votre application Web afin qu'elle soit dans son propre ensemble de modules. Pour travailler avec un serveur particulier, créez un fichier de script distinct si nécessaire pour pont entre ce que ce serveur nécessite et votre code d'application. Votre code d'application doit toujours être en dehors du répertoire de documents du serveur Web et seul le fichier de script qui agit en tant que pont serait dans le répertoire de documents de serveur si nécessaire. P>
Ok, donc il n'y a pas de moyen général de le faire. Dommage. Je vais juste devoir écrire un tas d'adaptateurs alors. Merci quand même!
Au 21 juillet 2009, il y a un guide d'installation beaucoup plus complet chez Le site d'installation de WebPy , qui discute flubler strong>,
Voici un exemple de deux applications hébergées utilisant CherryPy WSGI Server:
#!/usr/bin/python from web import wsgiserver import web # webpy wsgi app urls = ( '/test.*', 'index' ) class index: def GET(self): web.header("content-type", "text/html") return "Hello, world1!" application = web.application(urls, globals(), autoreload=False).wsgifunc() # generic wsgi app def my_blog_app(environ, start_response): status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) return ['Hello world! - blog\n'] """ # single hosted app server = wsgiserver.CherryPyWSGIServer( ('0.0.0.0', 8070), application, server_name='www.cherrypy.example') """ # multiple hosted apps with WSGIPathInfoDispatcher d = wsgiserver.WSGIPathInfoDispatcher({'/test': application, '/blog': my_blog_app}) server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8070), d) server.start()