You are not logged in.

  • Login

1

Tuesday, January 26th 2010, 4:23pm

Django auf Webspace aufsetzen

Hallo liebe Community,

vielleicht gibt es ja einen unter euch, der mir in meinem Problem weiterhelfen kann. Schon seit längerem gibt es für mich im Kopf nichts anderes als Python. Nachdem ich dann noch Django entdeckt habe, wurd es nicht besser.

Ich bin schon seid längerem bei All-Inkl und mit allem auch sehr zufrieden. Es ist auch möglich auf den Webservern Python (leider nur als CGI, aber was solls) zu nutzen. Nun bin ich in all dem nicht so bewandert und hab mich gefragt, ob es nicht auch möglich ist, Django auf einem dieser Webserver zu verwenden. Ich weiß aus Ubuntu, dass man Django beinahe komplett aus der Konsole steuern kann. Aber wie sieht es nun aus, wenn ich für meinen Webserver gar keine Console habe - logisch. Bei Ubuntu habe ich Django ja quasi vorher installiert? Funktioniert Django auch aus einem Ordner heraus?

Bin ich nun völlig aufgeschmissen? Wie läuft die ganze Sache? Ich habe bisher nur Erfahrungen im Bereich von PHP sammeln können. Und das ist, bescheiden gesagt, ne echt schnöde und einfache Umgebung, in der man entwickelt.

Ich hoffe, irgendwer kann mir helfen. Vielleicht habt oder findet ihr ja auch Links, die mir weiterhelfen könnten. Ich weiß leider wirklich überhaupt nicht, nach was und wie ich hier suchen soll. Jeder konstruktive Tipp ist mehr als Willkommen!

Danke,
euer Lemmi

2

Tuesday, January 26th 2010, 6:32pm

Hast du django denn inzwischen lokal am laufen? Auf jeden fall brauchst du eine shell.
Meines wissens reicht es aber, wenn die lokal arbeitet und du dann nur noch die daten hochlädst.

Das sollte der erste schritt sein, bevor du über paid hosting nachdenkst.
Ansonsten triffst du mit einem vserver die sicherere wahl. Ob dir der webhosting support weiterhelfen kann, halte ich fast für fraglich. Bei google habe ich auch nichts gefunden.

3

Tuesday, January 26th 2010, 7:21pm

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.

Similar threads

Social bookmarks