Django app exibindo a mesma página não importa qual URL visitou

1

Eu tenho um aplicativo Django simples que estou usando para testar uma nova estratégia de implantação usando Nginx, FastCGI (usando a versão mais recente do flup no momento da escrita) e daemontools.

Basicamente, o problema é que se eu visitar domain.com, a página principal é exibida corretamente, mas se eu visitar domain.com/example/, ela ainda exibe a página principal. Isso parece um problema com FastCGI para mim, mas estou completamente perplexo. Não importa qual página eu visito, sempre exibe a página principal. Nenhum erro, nada. É como se ele sempre silenciosamente retornasse a mesma página, não importando o URL.

O log de erros do nginx não tem absolutamente nada exibido nele, o que não ajuda em nada. O projeto funciona 100% perfeitamente usando o servidor de desenvolvimento, mas apenas falha no servidor.

Meu arquivo de execução do daemontools é o seguinte:

#!/usr/bin/env bash

source /envs/domain.com/bin/activate
PROJ_DIR=/project

exec envuidgid simon python $PROJ_DIR/manage.py \
        runfcgi method=threaded minspare=1 maxspare=2 host=127.0.0.1 \
        port=9001 pidfile=$PROJ_DIR/proj.pid daemonize=false

Minha configuração do nginx:

server {
    listen 80;
    server_name domain.com;
    rewrite ^/(.*) http://www.domain.com/$1 permanent;
}

server {
    listen 80;
    server_name www.domain.com;

    access_log /domain.com/logs/access.log;
    error_log /domain.com/logs/error.log;

    root /domain.com/public_html;
    index index.html;

    location / {
        try_files $uri @django;
    }

    location /static {
        alias /project/static;
    }

    location /media {
        alias /project/media;
    }

    location @django {
        include /opt/nginx/conf/fastcgi_params;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_pass_header Authorization;
        fastcgi_intercept_errors off;
    }
}

Qualquer ajuda seria muito apreciada:).

    
por Cromulent 12.03.2011 / 04:09

1 resposta

2

O que você tem em fastcgi_params ? Você deveria ter algo como:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  PATH_INFO          $fastcgi_script_name;

Também definido em settings.py :

FORCE_SCRIPT_NAME = ''

Esta é uma maneira de fazer isso. Você também pode deixar FORCE_SCRIPT_NAME no padrão e configurar tudo através do nginx.

    
por 12.03.2011 / 14:39