Flup installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(→‎Beispiel für roundup: Skizze durch funktionsfähigen Wrapper für CGI ersetzt)
Zeile 35: Zeile 35:
=== Wrapper erstellen ===
=== Wrapper erstellen ===


==== Beispiel für roundup ====
==== Beispiel für [[roundup]] ====


zusammen mit
zusammen mit
Zeile 76: Zeile 76:




kann man ''vermutlich'' einen Wrapper basteln, der
kann man einen Wrapper basteln, der


* ein gültiges CGI- oder FastCGI-Skript darstellt
* ein gültiges CGI- oder FastCGI-Skript darstellt
* und einen WSGI-Server für die Applikation implementiert
* und einen WSGI-Server für die Applikation implementiert


'''Skizze für CGI:'''
'''Wrapper für CGI:'''


#!/usr/bin/env python
  #!/usr/bin/env python
from cgi import WSGIServer
  import sys
# hier: cgi
  sys.path.append("/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages")
from myapplication import app
  from flup.server.cgi import WSGIServer
# Hier muss ich schauen,
  # obtain the WSGI request dispatcher
# dass ich das app-Objekt meiner Applikation importiert bekomme.
  from roundup.cgi.wsgi_handler import RequestDispatcher
# im obigen Fall also app = RequestDispatcher(tracker_home)
  tracker_home = '/pfad/zum/tracker/home/verzeichnis'
WSGIServer(app).run()
  app = RequestDispatcher(tracker_home)
  WSGIServer(app).run()




Zeile 96: Zeile 97:


  #!/usr/bin/env python
  #!/usr/bin/env python
  from fcgi import WSGIServer
  from '''fcgi''' import WSGIServer
  # hier: fastcgi
  '''# hier: fastcgi'''
  from myapplication import app
  from myapplication import app
  # Hier muss ich schauen,
  # Hier muss ich schauen,
Zeile 103: Zeile 104:
  # im obigen Fall also app = RequestDispatcher(tracker_home)
  # im obigen Fall also app = RequestDispatcher(tracker_home)
  WSGIServer(app).run()
  WSGIServer(app).run()





Version vom 28. Januar 2010, 09:46 Uhr

Vorlage:Anleitung ist noch nicht für den produktiven Einsatz geeignet!


Diese Seite muss überarbeitet werden

Diese Seite wurde als Baustelle gekennzeichnet, weil sie überarbeitet werden muss. Eine Begründung dafür findest du auf der Diskussionsseite. Bitte hilf mit, diese Seite zu verbessern!

Motivation

Im Python-Bereich existieren viele Anwendungen, die die CGI-Schnittstelle unterstützen. FastCGI auf direktem Wege ist eher ungebräuchlich.

Seit einigen Jahren etabliert sich für Python-Anwendungen und -Frameworks der Python Standard WSGI [1], eine Schnittstelle zur Kommunikation zwischen einem Webserver und einer Python-Webanwendung.

Beispielsweise roundup, Django, Trac und die kommende Mailman-Generation WSGI-fähig. Sogar für Zope gibt es mit Repoze eine WSGI-Implementierung.

Direkte Unterstützung für WSGI bieten wir über mod_wsgi, welches leider, wie auch mod_jk Benutzer der Option "eigene httpd.conf" vorbehalten ist, da hierfür der VirtualHost speziell konfiguriert werden muss.

Im Regelfall möchte man vermutlich jedoch nicht unbedingt die Option "eigene httpd.conf" bestellen. Einen Lösungsansatz bietet flup [2], welcher u.a. auch von Trac genutzt wird, um OOTB eine CGI- und FastCGI-Schnittstelle anzubieten. Flup kann also als Adapter zwischen der CGI- oder FastCGI-Schnittstelle des Webservers und der WSGI-Schnittstelle einer Webanwendung fungieren. Aus Performancegründen empfiehlt sich regelmäßig FastCGI. Daneben bietet flup diverse weitere Schnittstellen [3].

Auch der Einsatz von CGI, FastCGI, WSGI*, SCGI* oder AJP* erfordern keinen Root-Server, sondern ist mit Hostsharing-Bordmitteln möglich.

Anmerkung

* Ohne Adapter (etwa FastCGI <-> WSGI) erfordern diese Schnittstellen die Option "eigene httpd.conf". Mit gebuchter Option "eigene httpd.conf" können diese Schnittstellen auf direktem Wege (wie auf einem Root-Server) konfiguriert werden.


Nutzung von flup

flup ist bei HS zentral installiert. Man kann diverse Varianten der WSGIServer-Implementation importieren:

user@hNN:~$ python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from flup.server.fcgi import WSGIServer
>>> from flup.server.cgi import WSGIServer
>>> from flup.server.scgi import WSGIServer
>>> from flup.server.ajp import WSGIServer

Wrapper erstellen

Beispiel für roundup

zusammen mit

WSGI Handler

The WSGI handler is quite simple. The following sample code shows how to use it:

from wsgiref.simple_server import make_server
# obtain the WSGI request dispatcher
from roundup.cgi.wsgi_handler import RequestDispatcher
tracker_home = 'demo'
app = RequestDispatcher(tracker_home)
httpd = make_server('', 8917, app)
httpd.serve_forever()

To test the above you should create a demo tracker with python demo.py. Edit the config.ini to change the web URL to http://localhost:8917/.



und

aus der flup-Doku

28 	fcgi - a FastCGI/WSGI gateway.
29 	
30 	For more information about FastCGI, see <http://www.fastcgi.com/>.
31 	
32 	For more information about the Web Server Gateway Interface, see
33 	<http://www.python.org/peps/pep-0333.html>.
34 	
35 	Example usage:
36 	
37 	  #!/usr/bin/env python
38 	  from myapplication import app # Assume app is your WSGI application object
39 	  from fcgi import WSGIServer
40 	  WSGIServer(app).run()


kann man einen Wrapper basteln, der

  • ein gültiges CGI- oder FastCGI-Skript darstellt
  • und einen WSGI-Server für die Applikation implementiert

Wrapper für CGI:

 #!/usr/bin/env python
 import sys
 sys.path.append("/home/pacs/xyz00/users/USERNAME/roundup/install/lib/python2.5/site-packages")
 from flup.server.cgi import WSGIServer
 # obtain the WSGI request dispatcher
 from roundup.cgi.wsgi_handler import RequestDispatcher
 tracker_home = '/pfad/zum/tracker/home/verzeichnis'
 app = RequestDispatcher(tracker_home)
 WSGIServer(app).run()


Skizze für FastCGI:

#!/usr/bin/env python
from fcgi import WSGIServer
# hier: fastcgi
from myapplication import app
# Hier muss ich schauen,
# dass ich das app-Objekt meiner Applikation importiert bekomme.
# im obigen Fall also app = RequestDispatcher(tracker_home)
WSGIServer(app).run()


Für Django läuft die Erstellung eines Wrappers analog. Wichtig ist in jedem Fall ein App-Objekt für die Zielsoftware. Trac bringt freundlicherweise einen fertigen "Stub" mit.


[1] http://www.python.org/dev/peps/pep-0333/

[2] http://trac.saddi.com/flup

[3] http://trac.saddi.com/flup/browser/flup/server