2012-08-27 17 views
6

Tengo un proyecto de Django y quiero entregarlo usando gunicornio (y apax proxing). No puedo usar Nginx, así que eso no es posible.Implementar Django con Gunicorn y APACHE

He puesto el proxy de Apache y configurar un script corredor gunicorn, pero yo soy obtener este error raro

2012-08-27 14:03:12 [34355] [DEBUG] GET/
2012-08-27 14:03:12 [34355] [ERROR] Error handling request 
Traceback (most recent call last): 
    File "/home/tileone/venv/lib/python2.6/site-packages/gunicorn/workers/sync.py", line 93, in handle_request 
    self.address, self.cfg) 
    File "/home/tileone/venv/lib/python2.6/site-packages/gunicorn/http/wsgi.py", line 146, in create 
     path_info = path_info.split(script_name, 1)[1] 
    IndexError: list index out of range 

estoy corriendo este script

#!/bin/bash 
LOGFILE=/var/log/gunicorn/one-project.log 
VENV_DIR=/path/to/venv/ 
LOGDIR=$(dirname $LOGFILE) 
NUM_WORKERS=5 
# user/group to run as 
USER=USER 
GROUP=GROUP 
BIND=127.0.0.1:9999 
cd /path_to_project 
echo 'Setup Enviroment' 
#some libraries 
echo 'Setup Venv' 
source $VENV_DIR/bin/activate 
export PYTHONPATH=$VENV_DIR/lib/python2.6/site-packages:$PYTHONPATH 
#Setup Django Deploy 
export DJANGO_DEPLOY_ENV=stage 
echo 'Run Server' 
test -d $LOGDIR || mkdir -p $LOGDIR 
export SCRIPT_NAME='/home/tileone/one-project' 
exec $VENV_DIR/bin/gunicorn_django -w $NUM_WORKERS --bind=$BIND\ 
       --user=$USER --group=$GROUP --log-level=debug \ 
       --log-file=$LOGFILE 2>>$LOGFILE 

y mi configuración de Apache es de esta manera:

Alias /static/ /hpath_to_static/static/ 
Alias /media/ /path_to_static/media/ 
Alias /favicon.ico /path_to/favicon.ico 

ProxyPreserveHost On 
<Location /> 
    SSLRequireSSL 
    ProxyPass http://127.0.0.1:9999/ 
    ProxyPassReverse http://127.0.0.1:9999/ 
    RequestHeader set SCRIPT_NAME /home/tileone/one-project/ 
    RequestHeader set X-FORWARDED-PROTOCOL ssl 
    RequestHeader set X-FORWARDED-SSL on 
</Location> 

¿Qué estoy haciendo mal?

Respuesta

10

En caso de que alguien tiene problemas similares, lo logrado solucionar este problema quitando el equivalente de:

RequestHeader set SCRIPT_NAME /home/tileone/one-project/ 

Y en lugar de añadir a settings.py el equivalente a:

FORCE_SCRIPT_NAME = '/one-project' 

Por supuesto, para esto, la configuración de apache debería ser más como:

ProxyPreserveHost On 
<Location /one-project/> 
    SSLRequireSSL 
    ProxyPass http://127.0.0.1:9999/ 
    ProxyPassReverse http://127.0.0.1:9999/ 
    RequestHeader set X-FORWARDED-PROTOCOL ssl 
    RequestHeader set X-FORWARDED-SSL on 
</Location> 
Cuestiones relacionadas