Sólo un idiota puede ser totalmente feliz.
Mario Vargas Llosa
En los foros
Comentarios recientes
- En este tipo de guias, pienso
3 días 22 horas atrás - Es cierto, si comienzas con
6 días 2 horas atrás - Muy buena la aportación del
1 semana 1 día atrás - Bueno por donde empezar...
Ya
1 semana 3 días atrás - Saludos: Les comento que yo
1 semana 3 días atrás - Hola, yo adquiri el servicio
1 semana 4 días atrás - mi conexion de claro es una
1 semana 6 días atrás - Ya tengo configurado mi
2 semanas 2 días atrás - Un amigo que trabaja en
2 semanas 3 días atrás - Yo me acabo de comprar uno de
2 semanas 5 días atrás
Continuando el desarrollo de mi aplicación Django para Facebook compartiré algunas ideas sobre cómo configurar Apache y mod_python.
La mayoría de pasos están muy bien descritos en la documentación de Django, pero pueden ser necesarios algunos detalles más. Veamos.
La importancia de PYTHONPATH
La documentación muestra las líneas necesarias para configurar un sitio Django en Apache:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption django.root /mysite
PythonPath "['/path/to/project'] + sys.path"
PythonDebug On
</Location>
Obviamente PythonDebug On no debería aparecer, o estar en Off, para un ambiente de producción.
Estas instrucciones asumen que tu proyecto Django se llama mysite y que el sitio es accedido en un url como http://example.com/mysite. Y aún cuando la documentación dedica un par de párrafos a PYTHONPATH en mis primeras pruebas no me quedó claro su uso.
Yo decidí configurar un sitio que estará enteramente dedicado a mi proyecto Django, se pueden usar virtual hosts basados en nombre o IP en Apache, y quiero acceder desde la raíz: http://example.com/. Además, debido a que guardo todo mi trabajo con Python en /home/alexis/python-work, el proyecto estará en un directorio /home/alexis/python-work/project y su única aplicación en un subdirectorio: /home/alexis/python-work/project/app.
Admito que existen mejores formas de organizar proyectos y aplicaciones reusables en Django, como muy bien sugiere James Bennett, pero en mi proyecto bastaba con la tradicional estructura de project/app. En todo caso, estoy seguro que mis sugerencias se podrán adaptar a cualquier estructura. Aquí todas las líneas que uso para configurar mi sitio con Django en Apache:
<VirtualHost 192.168.0.180>
ServerName example.com
ServerAdmin alexis@example.com
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE project.settings
PythonDebug On
PythonPath "['/home/alexis/python-work', '/home/alexis/python-work/project'] + sys.path"
</Location>
</VirtualHost>
El IP en VirtualHost, 192.168.0.180, es el IP privado que decidí usar para este sitio. También he añadido 192.168.0.180 example.com en /etc/hosts para evitar cambios en mi servidor DNS, algo que deberás hacer en producción.
project.settings se refiere a settings.py en el directorio /home/alexis/python-work/project.
Además he removido la línea PythonOption django.root /mysite pues el sitio está en el directorio raíz, Location "/", y no es necesario añadir un subdirectorio.
Aquí lo más importante:
PythonPath "['/home/alexis/python-work', '/home/alexis/python-work/project'] + sys.path"
Así añadimos rutas a PYTHONPATH para mod_python. Son dos rutas, la del directorio padre y la del proyecto, ambas necesarias para que todos los import funcionen correctamente. La documentación de Django resalta este punto:
Remember: the parent directories of anything you import directly must be on the Python path.
Con estos cambios y un reinicio (restart), o posiblemente solo una recarga (reload), Apache debería poder usar tu proyecto Django desde http://example.com/.
¿Y todo lo demás?
No he comentado aún sobre cómo servir archivos estáticos en producción, algo que estoy haciendo con una combinación de Lighty, mod_proxy y Apache, o la configuración inicial de un servidor Linux, en mi caso Ubuntu, con Apache y mod_python así que tengo mucho más en camino sobre el despliegue de aplicaciones Django. Hasta entonces.
Artículos relacionados
- Cómo configurar Apache, mod_python y proxy reverso a Lighttpd para Django en Ubuntu
- Uso de comillas en los parámetros de {% url %} en Django
- HTTP 200 probando aplicaciones Django con Facebook
- Preguntas y respuestas sobre Django desde Suecia
- Cómo configurar un IP público con el servidor de desarrollo de Google App Engine


Participa en la discusión
Hola Alexis: Tu artículo me
Hola Alexis:
Tu artículo me ha sido de gran utilidad :)
Luego revisaré este otro para el tema de servir imágenes.
Saludos.
Qué bueno, me alegra que te
Qué bueno, me alegra que te haya servido. En estos días estoy trabajando en otro artículo con más alternativas para configurar un servidor web para imágenes y otros archivos con Django.
he buscado por Internet esta
he buscado por Internet esta explicación más de una semana.
Cosas de Google, hoy busqué por Live y me ha salido tu página.