Después de unas cuantas horitas dedicándole a configurar esto y otras cuantas a leer documentación (y traducirla) he podido hacer que funcione Django con mod_wsgi. Me he basado en las configuraciones de los compañeros de hosting y he modificado un par de cositas, eso era lo único necesario (además de tener un poco más de experiencia en Django, pues aun sigue siendo bastante poca). Os expongo mi experiencia y espero que ayude a otros novatos.
Como bien se sabe en tu ordenador local estableces proyectos Django mediante la secuencia:
django-admin.py stratproject nombre_proyecto
Donde
nombre_proyecto
es el nombre del proyecto que vas a empezar con Django, ya puede llamarse
pythoner,
pythoncocoa, etc. Esto parece trivial, pero no lo es, ahora se verá el motivo.
Una vez establecido el proyecto, hemos desarrollado nuestro sitio web usando el servidor de desarrollo Django o bien en un servidor Apache/mod_wsgi en nuestro ordenador local, procedemos a subir el directorio que ha sido creado por
django-admin.py
directamente al directorio
public_html
de nuestra cuenta de hosting.
Una vez subido creamos en el directorio
public_html
un archivo con el nombre de
django.wsgi (este puede llamarse como se quiera, pero lo vamos a dejar así, pues parece que está puesto en este hosting de esta manera) con el siguiente contenido:
import os, sys
sys.path.append('/home/USUARIO/public_html/DIRECTORIO_PROYECTO_DJANGO')
sys.path.append('/home/USUARIO/public_html')
os.environ['DJANGO_SETTINGS_MODULE'] = 'DIRECTORIO_PROYECTO_DJANGO.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/trac-eggs'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
En este código resaltamos dos aspectos:
USUARIO: es el usuario que usas tanto para acceder a tu cuenta FTP, cPanel, etc.
DIRECTORIO_PROYECTO_DJANGO: es el hombre del directorio donde se hospeda el proyecto django, normalmente el creado por
django-admin.py
.
Una vez hecho eso, procedemos a crear un archivo llamado .htaccess con el siguiente contenido:
SetHandler wsgi-script
PythonHandler wsgi_handler
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !(django.wsgi)
RewriteRule ^(.*)$ django.wsgi/$1 [L]
Este archivo activa el manejador Apache/mod_wsgi para empezar a trabajar (con las dos primeras líneas), luego activa el motor de manejo de URLs (mod_rewrite) de Apache para entre otras cosas proteger el archivo django.wsgi, esto es una medida de seguridad, pues acceder directamente mediante una URL al archivo django.wsgi puede dejar al descubierto nuestra aplicación Django, de esta manera se resuelve el problema.
Con esto debemos tener una estructura dentro del directorio
public_html
parecida a la siguiente:
public_html
cgi-bin
DIRECTORIO_PROYECTO_DJANGO
.htaccess
django.wsgi
error_log
Recordando siempre que DIRECTORIO_PROYECTO_DJANGO es el nombre del directorio creado por
django-admin.py
, como ejemplo concreto yo lo tengo así:
public_html
cgi-bin
mysite
.htaccess
django.wsgi
error_log
Luego es cuestión de acceder a vuestro sitio desde el navegador y ver que todo funciona correctamente.
Pythoner (pythonero at gmail.com)
Espero que os halla sido de ayuda.
Un saludo