¿Cómo se implementaría una aplicación Django en OS X Server 2.0 sin usar homebrew o un sabor diferente de python que el que se incluye con OS X 10.8.1? Estoy usando los enlaces de cacao en una aplicación de Django y tuve problemas para hacer que funcione con homebrew en mi máquina de escritorio (ejecutando OS X 10.8.1); de ahí la solicitud para implementar la aplicación en la versión instalada del sistema de Python.¿Cómo se implementa una aplicación django en OS X Server?
I tienen el siguiente entorno OS X Server, con la siguiente ya instalado:
- OS X 10.8.1
- OS X Server 2.0
- Python 2.7.2
- Apache 2.2. 22
Django 1.4.1 se instaló utilizando el siguiente comando:
sudo easy_install django
Mi primer intento es implementar un sitio web vacío, y una vez que tiene éxito, implementar una aplicación real para usar en producción. El proyecto fue creado el /Library/Server/Web/Data/WebApps/mysite/
con el siguiente comando
django-admin.py startproject mysite
me encontré con la aplicación mediante el siguiente comando. Simplemente confirmó que la aplicación estaba en funcionamiento. Es el estándar "¡funcionó!" página cuando creó por primera vez un proyecto.
python manage.py runserver 8080
entonces creado un archivo de /Library/Server/Web/Config/apache2/httpd_mysite.conf
con el siguiente contenido:
WSGIScriptAlias /mysite /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
creé además un archivo de /Library/Server/Web/Config/apache2/webapps/com.example.mysite.wsgi.plist
con el siguiente contenido:
<?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>
El archivo com.example.mysite.wsgi.plist
fue adaptado de com.apple.webapp.wsgi.plist
y httpd_mysite.conf
adaptado de httpd_wsgi.conf
. Ambos archivos se utilizan para ejecutar correctamente la aplicación python "independiente" cuando se configura a través del administrador del servidor.
Luego creé un sitio con el administrador del servidor, confirmé que mi aplicación estaba en la lista de aplicaciones web. Sin embargo, cuando visito http://example.com/mysite obtengo un error de 500. Los registros tiene las siguientes entradas (direcciones IP cambiado a 1.2.3.4 por razones de privacidad):
[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
No parece que el módulo WSGI es el manejo de la solicitud, pero en su lugar, la solicitud puede ser procesada utilizando FCGI . Sin embargo, el registro indica que se cargó mod_wsgi/3.3
.
Cuando creé una aplicación estándar de Python que se ve de la siguiente manera:
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]
y actualizar los archivos para que apunte a /Library/Server/Web/Data/WebApps/helloworld.wsgi
en lugar de /Library/Server/Web/Data/WebApps/mysite/mysite/wsgi.py
continuación, se muestra "Hello World". Por lo tanto, supongo que wsgi está configurado correctamente y es capaz de ejecutar aplicaciones y que algo más está mal con mi configuración.
Se instala en '/ Applications/Server.app/Contents/ServerRoot/usr/libexec/apache2/mod_wsgi.so' – bloudraak
Has acertado, renombrando' wsgi.py' a 'mysite.wsgi' invocado' mod_wsgi'. Me encontré con otros problemas que se resolvió agregando las rutas usando 'sys.path.append' en' mysite.wsgi' como se describe en [esta respuesta] (http: // stackoverflow.com/questions/2587251/configuration-problems-with-django-and-mod-wsgi). Gracias. – bloudraak