febrero 13, 2011

mod_wsgi apuntando a la versión correcta de python

mod_wsgi no carga correctamente las librerias de trac, en mi sistema lo tengo instalado en la versión 2.6, este es el error exacto:

mod_wsgi (pid=14804): Target WSGI script '/home/proyectos/trac/miproyecto-deploy/cgi-bin/trac.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=14804): Exception occurred processing WSGI script '/home/proyectos/trac/miproyecto-deploy/cgi-bin/trac.wsgi'.
Traceback (most recent call last):
  File "/home/proyectos/trac/miproyecto-deploy/cgi-bin/trac.wsgi", line 19, in 
    from trac.web.main import dispatch_request
ImportError: No module named trac.web.main

Si observamos a donde apunta el modulo wsgi, vemos que es a la versión 2.6:
# ldd mod_wsgi.so
        linux-vdso.so.1 =>  (0x00007fffc0bff000)
        libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00007f80b8511000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f80b82f6000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007f80b80f1000)
        libutil.so.1 => /lib/libutil.so.1 (0x00007f80b7eee000)
        libm.so.6 => /lib/libm.so.6 (0x00007f80b7c6d000)
        libc.so.6 => /lib/libc.so.6 (0x00007f80b7924000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f80b8acc000)

Como esto no cuadra mucho editamos /home/proyectos/trac/miproyecto-deploy/cgi-bin/trac.wsgi añadiendo al principio:

import sys
f=open('/tmp/debug','wb')
f.write('sys.prefix: %s\n' % str(sys.prefix))
f.write('sys.path: %s\n' % str(sys.path))
f.close()

Esto nos crea un archivo donde vemos en realidad de donde está importando las librerías a las que llamamos:

# cat /tmp/debug
sys.prefix: /usr
sys.path: ['/usr/lib64/python25.zip', '/usr/lib64/python2.5', '/usr/lib64/python2.5/plat-linux2', '/usr/lib64/python2.5/lib-tk', '/usr/lib64/python2.5/lib-dynload', '/usr/lib64/portage/pym', '/usr/lib64/python2.5/site-packages']

Como vemos realmente está buscando en la versión 2.5... echando un vistazo a la config de apache vemos por donde puede venir el problema:

LoadModule python_module      modules/mod_python.so
LoadModule wsgi_module        modules/mod_wsgi.so

Tras un poco de investigación el problema es que primero se carga el modulo mod_python linkado contra la 2.5, así que recompilar mod_python contra la 2.6 y funcionando :)

comentarios:

David dijo...

Hi, I just wanted to say a BIG Thank You for the help I needed & found on your web page http://www.adslayuda.com/xavi7768-configurar_ip_fija.html

Many thanks again