7
votes

Déploiement d'une application Web.py avec WSGI, plusieurs serveurs

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 () , je devrais utiliser web.application (.. .). wsgifunc () . Et maintenant quoi?


0 commentaires

3 Réponses :


6
votes

Exactement ce que vous devez faire pour l'organiser avec un mécanisme d'hébergement de WSGI spécifique varie avec le serveur.

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:

http://code.google.com/p/modwsgi/wiki/integrationwithweby < / a>

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:

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.


1 commentaires

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!



0
votes

Au 21 juillet 2009, il y a un guide d'installation beaucoup plus complet chez Le site d'installation de WebPy , qui discute flubler , fastcgi , apache et plus. Je n'ai pas encore essayé cela, mais cela semble être beaucoup plus détaillé.


0 commentaires

0
votes

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()


0 commentaires