Debian Lenny, Python 2.7 e mod_wsgi

3

Estou executando uma caixa do Debian Lenny, que vem com o Python 2.5.2. Eu gostaria de executar o Python 2.7 para meus aplicativos WSGI somente , mantendo 2.5 como padrão para o sistema, mas não consigo fazê-lo funcionar.

Primeiro, eu instalei o Python 2.7.2 da fonte em /usr/local :

Python-2.7.2 # ./configure --enable-shared
[…]
Python-2.7.2 # make
[…]
Python-2.7.2 # make altinstall
[…]

Chamar python2.7 agora da linha de comando funciona sem problemas. Também encontra pacotes instalados via pip in /usr/local/lib/python2.7/packages .

Em seguida, criei mod_wsgi e copiei-o manualmente para o diretório do módulo do Apache, para não tocar nos arquivos colocados por apt-get .

mod_wsgi-3.3 # ./configure --with-python=/usr/local/bin/python2.7
[…]
mod_wsgi-3.3 # make
[…]
mod_wsgi-3.3 # cp .libs/mod_wsgi.so /usr/lib/apache2/modules/mod_wsgi.so-2.7
mod_wsgi-3.3 # cd /usr/lib/apache2/modules
modules # ln -sf mod_wsgi.so-2.7 mod_wsgi.so
modules # ldd mod_wsgi.so-2.7
        linux-vdso.so.1 =>  (0x00007fff08f53000)
        libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00002b0317e1f000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00002b03181fd000)
        libdl.so.2 => /lib/libdl.so.2 (0x00002b031841a000)
        libutil.so.1 => /lib/libutil.so.1 (0x00002b031861e000)
        libm.so.6 => /lib/libm.so.6 (0x00002b0318821000)
        libc.so.6 => /lib/libc.so.6 (0x00002b0318aa5000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b03179cd000)

Eu então modifiquei /etc/apache2/mods-available/wsgi.conf e adicionei a seguinte diretiva:

<IfModule mod_wsgi.c>
    […]
    WSGIPythonHome /usr/local
    […]
</IfModule>

(Claro, wsgi.conf é linkado por símile em /etc/apache2/mods-enabled .)

Por fim, reiniciei o apache, mas meus scripts WSGI não serão executados. Recebo o seguinte traceback no log de erros do Apache:

mod_wsgi (pid=20746): Exception occurred processing WSGI script '/path/to/script.wsgi'.
Traceback (most recent call last):
  File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1306, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1295, in wsgi_app
    return response(environ, start_response)
  File "/usr/local/lib/python2.5/site-packages/Werkzeug-0.6.2-py2.5.egg/werkzeug/wrappers.py", line 1017, in __call__
    start_response(status, headers)
TypeError: expected byte string object for status, value of type str found

Eu também testei o script WSGI de teste encontrado na seção Problemas de instalação de mod_wsgi 's documentação, mas eu recebo o mesmo TypeError aqui. A julgar pelo traceback, eu diria que o Apache agora roda o Python 2.5 em combinação com mod_wsgi compilado para 2.7.

Alguma idéia?

    
por igor 14.07.2011 / 14:05

2 respostas

3

Problema resolvido. mod_python também foi carregado, desativando o truque. Como é a baunilha mod_python enviada com o Apache de Lenny, ela é compilada contra o Python 2.5.2 - naturalmente, isso não funciona em combinação com mod_wsgi compilado em uma versão diferente.

    
por 14.07.2011 / 21:18
1

tl; dr Certifique-se de que o PATH herdado pela conta de usuário do Apache veja o Python2.7 /bin e não a versão mais antiga.

link

"Se você tiver várias versões do Python instaladas e não estiver usando o que é o padrão, você pode ter que organizar o PATH herdado pelo aplicativo Apache quando executar resultará no Apache encontrar o versão alternativa. Como alternativa, a diretiva WSGIPythonExecutable deve ser usado para especificar a localização exata do executável 'python' correspondente à versão do Python compilada. Se isso não for feito, a versão do Python em execução no Apache pode tentar usar o Módulos Python da versão errada do Python. "

Além disso, não há nada que possa ser feito além de executar outro debian dentro do debian.

link

Ter proxy reverso Nginx nos diferentes ambientes virtuais.

    
por 14.07.2011 / 19:50