Django auf Webspace aufsetzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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
  • 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.
  • 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ß.

    treibsand.com/2006/08/03/django-uber-cgi-ausliefern/
    code.djangoproject.com/attachment/ticket/2407/django.cgi

    Ich hab jetzt einfach mal den Script genommen, den Django bereit stellt und versucht anzupassen:

    Quellcode

    1. #!/usr/bin/env python
    2. # encoding: utf-8
    3. print 'Content-Type: text/plain'
    4. print
    5. """
    6. django.cgi
    7. A simple cgi script which uses the django WSGI to serve requests.
    8. Code copy/pasted from PEP-0333 and then tweaked to serve django.
    9. http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
    10. This script assumes django is on your sys.path, and that your site code is at
    11. /home/mycode/mysite. Copy this script into your cgi-bin directory (or do
    12. whatever you need to to make a cgi script executable on your system), and then
    13. update the paths at the bottom of this file to suit your site.
    14. This is probably the slowest way to serve django pages, as the python
    15. interpreter, the django code-base and your site code has to be loaded every
    16. time a request is served. FCGI and mod_python solve this problem, use them if
    17. you can.
    18. In order to speed things up it may be worth experimenting with running
    19. uncompressed zips on the sys.path for django and the site code, as this can be
    20. (theorectically) faster. See PEP-0273 (specifically Benchmarks).
    21. http://www.python.org/dev/peps/pep-0273/
    22. Make sure all python files are compiled in your code base. See
    23. http://docs.python.org/lib/module-compileall.html
    24. """
    25. import os, sys
    26. # insert a sys.path.append("whatever") in here if django is not
    27. # on your sys.path.
    28. import django.core.handlers.wsgi
    29. project_name = 'hueds'
    30. project_path = '/cgi-bin/test' # Absolute directory above site code
    31. def run_with_cgi(application):
    32. environ = dict(os.environ.items())
    33. environ['wsgi.input'] = sys.stdin
    34. environ['wsgi.errors'] = sys.stderr
    35. environ['wsgi.version'] = (1,0)
    36. environ['wsgi.multithread'] = False
    37. environ['wsgi.multiprocess'] = True
    38. environ['wsgi.run_once'] = True
    39. if environ.get('HTTPS','off') in ('on','1'):
    40. environ['wsgi.url_scheme'] = 'https'
    41. else:
    42. environ['wsgi.url_scheme'] = 'http'
    43. headers_set = []
    44. headers_sent = []
    45. def write(data):
    46. if not headers_set:
    47. raise AssertionError("write() before start_response()")
    48. elif not headers_sent:
    49. # Before the first output, send the stored headers
    50. status, response_headers = headers_sent[:] = headers_set
    51. sys.stdout.write('Status: %s\r\n' % status)
    52. for header in response_headers:
    53. sys.stdout.write('%s: %s\r\n' % header)
    54. sys.stdout.write('\r\n')
    55. sys.stdout.write(data)
    56. sys.stdout.flush()
    57. def start_response(status,response_headers,exc_info=None):
    58. if exc_info:
    59. try:
    60. if headers_sent:
    61. # Re-raise original exception if headers sent
    62. raise exc_info[0], exc_info[1], exc_info[2]
    63. finally:
    64. exc_info = None # avoid dangling circular ref
    65. elif headers_set:
    66. raise AssertionError("Headers already set!")
    67. headers_set[:] = [status,response_headers]
    68. return write
    69. result = application(environ, start_response)
    70. try:
    71. for data in result:
    72. if data: # don't send headers until body appears
    73. write(data)
    74. if not headers_sent:
    75. write('') # send headers now if body was empty
    76. finally:
    77. if hasattr(result,'close'):
    78. result.close()
    79. # Change this to the directory above your site code.
    80. sys.path.append(project_path)
    81. # Change mysite to the name of your site package
    82. os.environ['DJANGO_SETTINGS_MODULE'] = project_name + '.settings'
    83. try:
    84. run_with_cgi(django.core.handlers.wsgi.WSGIHandler())
    85. except:
    86. print 'Fehler ... aber welcher?' # Geht das nicht genauer?
    Alles anzeigen


    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.

    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.