Lo más sencillo fue usar mod_python. Mi Apache ya lo cargaba y las instrucciones en la documentación de Django son claras. Como me agrada usar anfitriones virtuales, basta tener:
ServerName midominio.net
DocumentRoot /var/www/html
MaxRequestsPerChild 1 #Sólo para pruebas, si no es una grosería.
ServerName subdominio.dominio.net
SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonPath "['camino_a_un_directorio_arriba_del_proyecto', 'camino_uno_arriba_de_las_aplicaciones'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE [proyecto].settings
PythonDebug On
SetHandler None
SetHandler None
La parte truculenta vino de SELinux. Los proyectos de Django (y sus aplicaciones) no deben ir en la ruta de Apache, lo cual lo hace especialmente seguros. Sin embargo, al tener mis archivos, inocentemente, en algún profundo lugar de mi hogar, aunque agregara el directorio con PythonPath, me aparecía un error indicando que el módulo [proyecto].seetings no existía:
EnvironmentError: Could not import settings '____.settings'
(Is it on sys.path? Does it have syntax errors?): No module named wap.settings
El verdadero problema es que, no sólo apache debe tener los permisos normales de lectura, sino que toda la ruta hasta el proyecto (y todos los archivos de éste) deben tener el contexto para la web:
user_u:object_r:httpd_sys_content_t
Copiar mis archivos a un directorio en el que pudiera otorgar dichos permisos con
$ chcon -R user_u:object_r:httpd_sys_content_t [directorio]
resolvió el problema.
No hay comentarios.:
Publicar un comentario