Wie stellt man eine Django-Anwendung unter OS X Server bereit?

Wie kann man eine Django-Anwendung unter OS X Server 2.0 bereitstellen, ohne Homebrew oder eine andere Python-Variante als die mit OS X 10.8.1 gelieferte zu verwenden? Ich verwende die Kakaobindungen in einer Django-Anwendung und hatte Probleme, sie mit Homebrew auf meinem Desktop-Computer (unter OS X 10.8.1) zum Laufen zu bringen. daher die Aufforderung, die Anwendung auf der vom System installierten Version von Python bereitzustellen.

Ich habe die folgende OS X Server-Umgebung mit der folgenden bereits installiert:

OS X 10.8.1OS X Server 2.0Python 2.7.2Apache 2.2.22

Django 1.4.1 wurde mit folgendem Befehl installiert:

sudo easy_install django

Mein erster Versuch besteht darin, eine leere Website bereitzustellen. Wenn dies erfolgreich ist, muss eine echte Anwendung bereitgestellt werden, die in der Produktion verwendet werden kann. Das Projekt wurde erstellt um/Library/Server/Web/Data/WebApps/mysite/ Verwenden Sie den folgenden Befehl

django-admin.py startproject mysite

Ich habe die Anwendung mit dem folgenden Befehl ausgeführt. Es wurde lediglich bestätigt, dass die Anwendung aktiv war. Es ist der Standard "Es hat funktioniert!" Seite, als Sie zum ersten Mal ein Projekt erstellt haben.

python manage.py runserver 8080

Ich habe dann eine Datei erstellt/Library/Server/Web/Config/apache2/httpd_mysite.conf mit folgendem Inhalt:

WSGIScriptAlias /mysite /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py

Ich habe weiter eine Datei erstellt/Library/Server/Web/Config/apache2/webapps/com.example.mysite.wsgi.plist mit folgendem Inhalt:

<?xml version="1.0" encoding="UTF-7"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>name</key>
        <string>com.example.mysite.wsgi</string>
        <key>displayName</key>
        <string>Python "My Site" app</string>
        <key>launchKeys</key>
        <array/>
        <key>proxies</key>
        <dict/>
        <key>installationIndicatorFilePath</key>
        <string>/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py</string>
        <key>includeFiles</key>
        <array>
                <string>/Library/Server/Web/Config/apache2/httpd_mysite.conf</string>
        </array>
        <key>requiredModuleNames</key>
        <array>
                <string>wsgi_module</string>
        </array>
</dict>
</plist>

Die Dateicom.example.mysite.wsgi.plist wurde angepasst voncom.apple.webapp.wsgi.plist undhttpd_mysite.conf angepasst vonhttpd_wsgi.conf. Beide Dateien werden verwendet, um die "eigenständige" Python-Anwendung erfolgreich auszuführen, wenn sie über den Server-Manager konfiguriert werden.

Anschließend habe ich mit dem Server-Manager eine Site erstellt und bestätigt, dass meine Anwendung in der Liste der Webanwendungen enthalten ist. Allerdings, wenn ich besuchehttp://example.com/meinesite Ich bekomme eine 500er Fehlermeldung. Das Protokoll enthält die folgenden Einträge (IP-Adressen wurden aus Datenschutzgründen in 1.2.3.4 geändert):

[Sat Sep 01 21:49:17 2012] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Sat Sep 01 21:49:17 2012] [notice] Apache/2.2.22 (Unix) PHP/5.3.13 with Suhosin-Patch mod_wsgi/3.3 Python/2.7.2 mod_fastcgi/2.4.6 mod_ssl/2.2.22 OpenSSL/0.9.8r DAV/2 configured -- resuming normal operations
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] (8)Exec format error: exec of '/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py' failed
[Sat Sep 01 21:50:13 2012] [error] [client 1.2.3.4] Premature end of script headers: wsgi.py

Es scheint nicht, dass das WSGI-Modul die Anforderung verarbeitet, sondern dass die Anforderung möglicherweise mit FCGI verarbeitet wird. Das Protokoll zeigt dies jedoch anmod_wsgi/3.3 war geladen.

Beim Erstellen einer Standard-Python-Anwendung sah das folgendermaßen aus:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Aktualisieren Sie die Dateien, auf die verwiesen wird/Library/Server/Web/Data/WebApps/helloworld.wsgi eher, als/Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py dann wird "Hello World" angezeigt. Ich gehe daher davon aus, dass wsgi korrekt konfiguriert ist und Anwendungen ausführen kann und dass etwas anderes mit meinem Setup nicht stimmt.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage