Como configurar o ReviewBoard com o mod_wsgi e o Apache no local não-root

2

Estou tentando configurar o ReviewBoard em um Mac executando o OS X Leopard (10.5.8) com o Python 2.5 e mod_wsgi 3.3 instalado. Estou usando o sqlite e o Apache 2 padrão que vem com o OS X; A raiz do documento está localizada em /Library/WebServer/Documents/ . Como minha máquina já está hospedando algumas outras coisas em outros caminhos dentro dessa raiz, eu quero servir ReviewBoard em um caminho em vez da raiz do servidor.

Eu criei um site, defini o proprietário e as permissões necessárias, criei um link simbólico para o arquivo de configuração do Apache e removi as linhas que seriam hospedadas como uma raiz do servidor. Aqui está o meu conf/apache_wsgi.conf :

WSGIScriptAlias "/reviewboard" "/Library/WebServer/Documents/reviewboard/htdocs/reviewboard.wsgi"

<Directory "/Library/WebServer/Documents/reviewboard/htdocs">
    AllowOverride All
</Directory>

# Alias static media requests to filesystem
Alias /reviewboard/media "/Library/WebServer/Documents/reviewboard/htdocs/media"

No entanto, não consigo acessar o ReviewBoard, apenas 404 páginas de erro.

Quando eu tenho o seguinte em conf / settings_local.py:

SITE_ROOT = '/reviewboard/'
FORCE_SCRIPT_NAME = ''
DEBUG = True

e eu visito link , recebo o seguinte no Apache access_log:

"GET /reviewboard/ HTTP/1.1" 404 1923

e uma página 404 no navegador com o seguinte:

Request Method: GET
Request URL: http://example.com/

Using the URLconf defined in djblets.util.rooturl, Django tried these URL patterns, in this order:
  ^reviewboard/
The current URL, dashboard/, didn't match any of these.

Isso parece quase idêntico a um problema semelhante relatado com Apache e mod_wsgi , então eu tentei a abordagem sugerida nesse tópico ...

Quando eu tenho o seguinte em conf / settings_local.py:

SITE_ROOT = ''
FORCE_SCRIPT_NAME = '/reviewboard'
DEBUG = True

e eu visito link (depois de reiniciar o Apache), recebo o seguinte no Apache access_log:

"GET /reviewboard HTTP/1.1" 301 -
"GET /reviewboard/dashboard/ HTTP/1.1" 302 -
"GET /reviewboard/dashboard/account/login/?next_page=/reviewboard/dashboard/ HTTP/1.1" 404 2871

e um 404 no navegador com o seguinte:

Request Method: GET
Request URL: http://example.com/reviewboard/dashboard/account/login/?next_page=/reviewboard/dashboard/

Using the URLconf defined in djblets.util.rooturl, Django tried these URL patterns, in this order:
  ^ ^admin/
  ^ ^media/(?P<path>.*)$
  ^ ^account/
  ^ ^api/
  ^ ^r/
  ^ ^reports/
  ^ ^dashboard/$
  ^ ^users/$
  ^ ^users/(?P<username>[A-Za-z0-9@_\-\.]+)/$
  ^ ^groups/$
  ^ ^groups/(?P<name>[A-Za-z0-9_-]+)/$
  ^ ^groups/(?P<name>[A-Za-z0-9_-]+)/members/$
  ^ ^feeds/rss/(?P<url>.*)/$
  ^ ^feeds/atom/(?P<url>.*)/$
  ^ ^account/logout/$
  ^ ^$
  ^ ^iphone/
The current URL, dashboard/account/login/, didn't match any of these.

Isso é semelhante aos problemas relatados com apache e mod_python e lightppd e fastcgi , exceto que estou usando o Apache e o mod_wsgi.

Desde que eu consiga que o ReviewBoard seja hospedado em um caminho único na instância do servidor existente, não me importo muito onde os arquivos do site estão localizados. Ajudá-lo a conseguir isso e ser muito apreciado!

    
por Quinn Taylor 06.12.2010 / 19:37

1 resposta

2

Eu concluí que o @ptman está correto, e que o suporte para o mod_wsgi com o ReviewBoard é ilusório na melhor das hipóteses. Felizmente, descobri soluções para a criação de mod_python em 10.5 e 10.6 e em Intel e PowerPC. (O servidor under-my-desk que estou usando é um G5 rodando o 10.5.8, que é o melhor que ele já conseguiu.)

Aqui está o script bash que desenvolvi para baixar, configurar, construir e instalar mod_python para o Apache no OS X:

#! /bin/bash
cd ~/Downloads
curl -O http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz
tar xvzf mod_python-3.3.1.tgz
cd mod_python-3.3.1
# Detect kernel version (OS X 10.5.x is "9.x.0", OS X 10.6.x is "10.x.0", etc.)
if [ 'uname -r | cut -d . -f 1' -ge 10 ]; then
    echo "*** Code change to compile on 10.6+"
    cp src/connobject.c src/connobject.c.orig
    sed 's/APR_BRIGADE_SENTINEL(b)/APR_BRIGADE_SENTINEL(bb)/g' src/connobject.c.orig > src/connobject.c
    diff -u src/connobject.c.orig src/connobject.c
    echo
fi
./configure
# See http://mike.crute.org/blog/mod_python-on-leopard for Makefile changes.
# On a G5 we have to explicitly build ppc64 or Apache won't load the module.
cp src/Makefile src/Makefile.orig
if [ 'arch' == "ppc" ]; then
    sed -e 's/^(LDFLAGS=.*)$/ -arch ppc -arch ppc64/g' \
        -e 's/^(CFLAGS=.*)$/ -arch ppc -arch ppc64/g' \
        -e 's/(\$\(APXS\) \$\(INCLUDES\) -c)/ -Wc,"-arch ppc" -Wc,"-arch ppc64"/g' \
        -E src/Makefile.orig > src/Makefile
else
    sed -e 's/^(LDFLAGS=.*)$/ -arch i386 -arch x86_64/g' \
        -e 's/^(CFLAGS=.*)$/ -arch i386 -arch x86_64/g' \
        -e 's/(\$\(APXS\) \$\(INCLUDES\) -c)/ -Wc,"-arch i386" -Wc,"-arch x86_64"/g' \
        -E src/Makefile.orig > src/Makefile
fi
make
sudo make install
sudo apxs -e -a -n 'python' mod_python.la

Feito isso - e com o ReviewBoard e todas as suas dependências instaladas - eu criei um site dentro do diretório raiz do meu servidor e o configurei para usar o mod_python:

rb-site install /Library/WebServer/Documents/reviewboard

Aqui está minha conf/apache-modpython.conf para hospedar meu site ReviewBoard em um sub-caminho do meu servidor existente:

<Location "/reviewboard/">
    PythonPath "['/Library/WebServer/Documents/reviewboard/conf'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
    SetEnv PYTHON_EGG_CACHE "/Library/WebServer/Documents/reviewboard/tmp/egg_cache"
    SetEnv HOME "/Library/WebServer/Documents/reviewboard/data"
    SetHandler mod_python
    PythonHandler django.core.handlers.modpython
    PythonAutoReload Off
    PythonDebug Off
    # Used to run multiple mod_python sites in the same apache
    PythonInterpreter reviewboard_reviewboard
</Location>

<Location "/reviewboard/media">
    SetHandler None
</Location>

Alias /reviewboard/media "/Library/WebServer/Documents/reviewboard/htdocs/media"

<Directory "/Library/WebServer/Documents/reviewboard/htdocs">
    AllowOverride All
</Directory>

Por conveniência, eu apenas criei uma ligação simbólica do diretório de configuração apropriado do Apache:

sudo ln -s /Library/WebServer/Documents/reviewboard/conf/apache-modpython.conf \
           /etc/apache2/other/reviewboard.conf

Espero que isso seja útil para alguém que queira fazer o mesmo. Obrigado pelo empurrão na direção certa, @ptman!

    
por 13.12.2010 / 18:37