Lokal läuft bei mir Ubuntu in der VirtualBox. Da hab ich Django auch im Handumdrehen eingerichtet.
Ich finde auch schon bereits mehrere Quellen, die von einer Einbindung von Django unter CGI sprechen, nur versteh ich nur sehr wenige Vorgänge in diesen Scripten, geschweige denn, dass ich weiß, wie ich diese einbinde und verwende. Parallelen zu PHP gibt es einfach keine, weshalb ich da einfach nicht weiter weiß.
http://www.treibsand.com/2006/08/03/djan…cgi-ausliefern/
http://code.djangoproject.com/attachment…2407/django.cgi
Ich hab jetzt einfach mal den Script genommen, den Django bereit stellt und versucht anzupassen:
|
Python Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#!/usr/bin/env python
# encoding: utf-8
print 'Content-Type: text/plain'
print
"""
django.cgi
A simple cgi script which uses the django WSGI to serve requests.
Code copy/pasted from PEP-0333 and then tweaked to serve django.
http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
This script assumes django is on your sys.path, and that your site code is at
/home/mycode/mysite. Copy this script into your cgi-bin directory (or do
whatever you need to to make a cgi script executable on your system), and then
update the paths at the bottom of this file to suit your site.
This is probably the slowest way to serve django pages, as the python
interpreter, the django code-base and your site code has to be loaded every
time a request is served. FCGI and mod_python solve this problem, use them if
you can.
In order to speed things up it may be worth experimenting with running
uncompressed zips on the sys.path for django and the site code, as this can be
(theorectically) faster. See PEP-0273 (specifically Benchmarks).
http://www.python.org/dev/peps/pep-0273/
Make sure all python files are compiled in your code base. See
http://docs.python.org/lib/module-compileall.html
"""
import os, sys
# insert a sys.path.append("whatever") in here if django is not
# on your sys.path.
import django.core.handlers.wsgi
project_name = 'hueds'
project_path = '/cgi-bin/test' # Absolute directory above site code
def run_with_cgi(application):
environ = dict(os.environ.items())
environ['wsgi.input'] = sys.stdin
environ['wsgi.errors'] = sys.stderr
environ['wsgi.version'] = (1,0)
environ['wsgi.multithread'] = False
environ['wsgi.multiprocess'] = True
environ['wsgi.run_once'] = True
if environ.get('HTTPS','off') in ('on','1'):
environ['wsgi.url_scheme'] = 'https'
else:
environ['wsgi.url_scheme'] = 'http'
headers_set = []
headers_sent = []
def write(data):
if not headers_set:
raise AssertionError("write() before start_response()")
elif not headers_sent:
# Before the first output, send the stored headers
status, response_headers = headers_sent[:] = headers_set
sys.stdout.write('Status: %s\r\n' % status)
for header in response_headers:
sys.stdout.write('%s: %s\r\n' % header)
sys.stdout.write('\r\n')
sys.stdout.write(data)
sys.stdout.flush()
def start_response(status,response_headers,exc_info=None):
if exc_info:
try:
if headers_sent:
# Re-raise original exception if headers sent
raise exc_info[0], exc_info[1], exc_info[2]
finally:
exc_info = None # avoid dangling circular ref
elif headers_set:
raise AssertionError("Headers already set!")
headers_set[:] = [status,response_headers]
return write
result = application(environ, start_response)
try:
for data in result:
if data: # don't send headers until body appears
write(data)
if not headers_sent:
write('') # send headers now if body was empty
finally:
if hasattr(result,'close'):
result.close()
# Change this to the directory above your site code.
sys.path.append(project_path)
# Change mysite to the name of your site package
os.environ['DJANGO_SETTINGS_MODULE'] = project_name + '.settings'
try:
run_with_cgi(django.core.handlers.wsgi.WSGIHandler())
except:
print 'Fehler ... aber welcher?' # Geht das nicht genauer?
|
Lass ich am Ende das Fangen einer Exception weg, kriege ich ledigilich eine 500er Fehlerseite. Und wie läuft das mit dem ansprechen der Datei? Ich meine, momentan hab ich etwas unsinniger weiße im Kopf den Content-Type-header reingesetzt, damit ich überhaupt zu einer Ausgabe komme.
http://py.vipixel.de/test/django.cgi
Weiß jemand Rat?
PS: Die Details über die Fehlermeldung sind nun genauer. Trotzdem fehlt mir noch jedweger Ansatz.
PS 2: Er fragt nach einer sogenannten Einstellung "settings.SESSION_ENGINE". Die ist aber nicht in der settings.py Datei enthalten. Such ich da falsch?
PS 3: Ich gebe nun auf. Python ist und bleibt mein Favorit. Leider muss ich aber wohl erstmal darauf verzichten. Denn nun stelle ich fest und lese ich beim Nachforschen immer wieder CGI = Bäh! Und wenn ich dann mal die Geschwindigkeit beobachte, mit denen eine einfache Seite aufgerufen wird, komm ich doch schon stark ins Grübeln, ob sich das lohnt. Also: Es ist und bleibt schade und zu funktionieren scheint es auch nicht.
Sollte noch jemand auf die Lösung kommen oder einen passenden Tipp parat haben, wäre ich ihm mehr als Dankbar, weiterhin.