Question

J'ai créé une application web.py, et maintenant qu'il est prêt à être déployé, je veux courir dans pas sur serveur Web intégré de web.py. Je veux être en mesure de fonctionner sur différents serveurs web, Apache ou IIS, sans avoir à changer mon code d'application. C'est là WSGI est censé venir, si je comprends bien.
Cependant, je ne comprends pas ce que exacly je dois faire pour mon déployable d'application sur un serveur WSGI? La plupart des exemples supposent que vous utilisez Pylônes / Django / autre-cadre, sur lequel vous exécutez simplement une commande magique qui fixe tout pour vous.
D'après ce que je comprends de la (très bref) documentation web.py, au lieu de courir web.application(...).run(), je devrais utiliser web.application(...).wsgifunc(). Et maintenant quoi?

Était-ce utile?

La solution

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

Pour le cas d'Apache / mod_wsgi et passagers Phusion, il vous suffit de fournir un fichier de script WSGI qui contient un objet appelé « application ». Pour web.py 0,2, c'est le résultat de l'appel web.wsgifunc () avec les arguments appropriés. Pour web.py 0,3, vous utilisez à la place la fonction de membre de wsgifunc () de l'objet retourné par web.application (). Pour plus de détails de ces voir la documentation mod_wsgi:

http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy

Si au contraire vous avez à utiliser FastCGI, SCGI ou adaptateurs AJP pour un serveur tel que Lighttpd, nginx ou Cherokee, alors vous devez utiliser le package « flup » pour fournir un pont entre ces interfaces langue agnostique et WSGI. Cela implique d'appeler une fonction flup avec le même objet d'application WSGI ci-dessus que quelque chose comme mod_wsgi ou passager Phusion utiliserait directement, sans la nécessité d'un pont. Pour plus de détails de ce voir:

http://trac.saddi.com/flup/wiki/FlupServers

La chose importante est de structurer votre application Web afin qu'il soit dans son propre AUTONOME ensemble de modules. Travailler avec un serveur particulier, puis créer un fichier de script distinct nécessaire pour combler entre ce que ce serveur requiert 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 comme pont serait dans le répertoire de documents du serveur, le cas échéant.

Autres conseils

À partir du 21 Juillet 2009, un guide d'installation beaucoup plus complète le webpy site d'installation , qui traite flup , fastcgi , apache et plus. Je ne l'ai pas encore essayé , mais il semble que c'est beaucoup plus détaillée.

Voici un exemple de deux applications hébergées utilisant le serveur cherrypy wsgi:

#!/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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top