Ich habe eine web.py-Anwendung erstellt, und jetzt, da sie für die Bereitstellung bereit ist, möchte ich nicht auf dem integrierten web.py-Webserver ausgeführt werden. Ich möchte es auf verschiedenen Webservern, Apache oder IIS ausführen können, ohne meinen Anwendungscode ändern zu müssen. Hier sollte WSGI hereinkommen, wenn ich es richtig verstehe.
Allerdings verstehe ich nicht, was genau ich tun muss, um meine Anwendung auf einem WSGI-Server deploybar zu machen? Die meisten Beispiele nehmen an, dass Sie Pylons/Django/other-framework verwenden, auf dem Sie einfach einen magischen Befehl ausführen, der alles für Sie repariert.
Von dem, was ich von der (ziemlich kurzen) web.py Dokumentation verstehe, anstelle von web.application(...).run()
, sollte ich web.application(...).wsgifunc()
verwenden. Und dann was?Bereitstellen einer Web.py-Anwendung mit WSGI, mehrere Server
Antwort
Genau das, was Sie tun müssen, um es mit einem bestimmten WSGI-Hosting-Mechanismus zu hosten, hängt vom Server ab.
Für Apache/mod_wsgi und Phusion Passenger müssen Sie nur eine WSGI-Skriptdatei bereitstellen, die ein Objekt namens "application" enthält. Für web.py 0.2 ist dies das Ergebnis des Aufrufs von web.wsgifunc() mit entsprechenden Argumenten. Für web.py 0.3 verwenden Sie stattdessen die wsgifunc() -Memberfunktion des von web.application() zurückgegebenen Objekts. Einzelheiten zu diesen mod_wsgi Dokumentation:
http://code.google.com/p/modwsgi/wiki/IntegrationWithWebPy
Wenn Sie stattdessen FastCGI, SCGI oder AJP Adapter für einen Server wie Lighttpd, nginx oder Cherokee verwenden haben, dann müssen Sie ‚flup‘ Paket verwenden eine Brücke zwischen diesen sprachunabhängigen Schnittstellen und WSGI zu schlagen. Dies beinhaltet das Aufrufen einer Flup-Funktion mit demselben WSGI-Anwendungsobjekt über etwas, das mod_wsgi oder Phusion Passenger direkt verwenden würde, ohne dass eine Brücke benötigt wird. Einzelheiten zu diesem siehe:
http://trac.saddi.com/flup/wiki/FlupServers
Wichtig ist, Ihre Web-Anwendung so zu strukturieren, dass sie in ihrem eigenen selbst enthalten ist die Module festgelegt. Um mit einem bestimmten Server zu arbeiten, erstellen Sie nach Bedarf eine separate Skriptdatei, um zwischen dem, was dieser Server benötigt, und Ihrem Anwendungscode zu überbrücken. Ihr Anwendungscode sollte sich immer außerhalb des Dokumentordners des Webservers befinden und nur die Skriptdatei, die als Bridge fungiert, befindet sich gegebenenfalls im Verzeichnis des Serverdokuments.
Ab 21. 2009, im Juli gibt es eine viel vollere Installationsanleitung bei the webpy install site, die flup, fastcgi, Apache und mehr diskutiert. Ich habe es noch nicht versucht es, aber es scheint, als wäre es viel detaillierter. Hier
ist ein Beispiel für zwei gehostete Anwendungen mit 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()
- 1. Maven auf mehrere Tomcat-Server bereitstellen
- 2. Non-blocking gleichzeitige wsgi-Server
- 3. Bereitstellen einer Rails-Anwendung auf mehrere Standorte
- 4. WSGI verstehen
- 5. Mehrere App zusammen bereitstellen
- 6. Kann webpack-dev-server mehrere HTML-Dateien bereitstellen?
- 7. Bereitstellen einer Bottle.py App mit Apache mod_wsgi unter Ubuntu 16.04
- 8. Tornado vs wsgi (mit gunicorn)
- 9. Wie behandelt wsgi mehrere Anforderungsheader mit demselben Namen?
- 10. Apache2 wsgi Themen/Prozesse
- 11. Django + WSGI: Erfrischende Probleme?
- 12. Ausführen einer Pyramid WSGI-Anwendung unter Tornado
- 13. tornado wie man WebSockets mit wsgi verwendet
- 14. Bereitstellen von Typescript NodeJS Server
- 15. Bereitstellen einer Umbraco-Site mit Visual Studio
- 16. Softlayer: Bereitstellen einer PEM-Datei für den Zugriff auf Server
- 17. Problem beim Bereitstellen einer Anwendung, die SQL Server 2008 Express
- 18. ASP.NET MVC: Mehrere Kopien einer Site bereitstellen müssen
- 19. $ _SERVER vs WSGI Umgebungsparameter
- 20. Python WSGI mit langen laufenden Prozess
- 21. Kombinieren von Websockets und WSGI in einer Python-App
- 22. Django Website auf Apache mit WSGI Fehler
- 23. cherrypy und relativer Pfad in WSGI App
- 24. Bereitstellen einer Website von Subversion
- 25. wsgi django funktioniert nicht
- 26. WSGI-Server, der Anfrage verarbeitet, obwohl Client getrennt wird? - Python
- 27. Bereitstellen einer Silverlight-Site
- 28. Bereitstellen von NLog mit einer ClickOnce-Anwendung
- 29. Wie Krieg mit abhängiger Bibliothek auf Remote-Tomcat-Server bereitstellen
- 30. Reload django wsgi Skripte ohne Root
Ok, so gibt es keine allgemeine Art und Weise, es zu tun. Das Mitleid. Ich muss dann nur ein paar Adapter aufschreiben. Danke trotzdem! – carlpett