2012-08-27 23 views
6

Bir Django projem var ve silahı (ve apache proxing) kullanarak teslim etmek istiyorum. Nginx kullanamıyorum, bu mümkün değil.Django'yu Gunicorn ve APACHE ile dağıtın.

Apache proxy ve kurulum gunicorn bir koşucu komut ayarladım, ama

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 

Bu senaryoyu

#!/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 

ve benim apache konfigürasyonu çalıştırıyorum olan bu garip hatayı almak duyuyorum böyle:

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> 

Neyi yanlış yapıyorum? Bunun için tabii

FORCE_SCRIPT_NAME = '/one-project' 

:

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

Ve yerine settings.py için eşdeğer ekleyerek:

cevap

10

durumda herkes, ben eşdeğer kaldırarak bunu düzeltmek için benzer konular başarmıştır Apache yapılandırması daha fazla olmalıdır:

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>