2010-03-12 15 views
7

Estoy ejecutando CentOS 5, y estoy tratando de obtener una aplicación django que funcione con mod_wsgi. Estoy usando la configuración .wsgi. Empecé a trabajar en Ubuntu. También estoy usando una instalación alternativa de pitón (/opt/python2.6/) desde mi aplicación Django necesita> 2.5 y 2.3 del OS utilizaIntentando que la aplicación django funcione con mod_wsgi en CentOS 5

Aquí está el error:

[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] SystemError: dynamic module not initialized properly 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] mod_wsgi (pid=23630): Target WSGI script '/data/hosting/cubedev/apache/django.wsgi' cannot be loaded as Python module. 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] mod_wsgi (pid=23630): Exception occurred processing WSGI script '/data/hosting/cubedev/apache/django.wsgi'. 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] Traceback (most recent call last): 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] File "/data/hosting/cubedev/apache/django.wsgi", line 8, in 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] import django.core.handlers.wsgi 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] File "/opt/python2.6/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 1, in 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] from threading import Lock 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] File "/opt/python2.6/lib/python2.6/threading.py", line 13, in 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] from functools import wraps 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] File "/opt/python2.6/lib/python2.6/functools.py", line 10, in 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] from _functools import partial, reduce 
[Thu Mar 04 10:52:15 2010] [error] [client 10.1.0.251] SystemError: dynamic module not initialized properly 

Y aquí está mi archivo .wsgi

import os 
import sys 
os.environ['PYTHON_EGG_CACHE'] = '/tmp/django/' # This line was added for CentOS. 
os.environ['DJANGO_SETTINGS_MODULE'] = 'cube.settings' 

sys.path.append('/data/hosting/cubedev') 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

salida del LDD /usr/lib/httpd/modules/mod_wsgi.so confi

linux-gate.so.1 => (0x00250000) 
libpython2.6.so.1.0 => /opt/python2.6/lib/libpython2.6.so.1.0 (0x00be6000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00110000) 
libdl.so.2 => /lib/libdl.so.2 (0x00557000) 
libutil.so.1 => /lib/libutil.so.1 (0x00128000) 
libm.so.6 => /lib/libm.so.6 (0x0012c000) 
libc.so.6 => /lib/libc.so.6 (0x00251000) 
/lib/ld-linux.so.2 (0x0039a000) 

vHost g

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerAlias cube-dev.example.com 
    ServerName cube-dev.example.com 
    ErrorLog logs/cube-dev.example.com.error_log 
    CustomLog logs/cube-dev.example.com.access_log common 
    Alias /phpMyAdmin /var/www/phpMyAdmin/ 
    # DocumentRoot /data/hosting/cubedev 

    WSGIScriptAlias//data/hosting/cubedev/apache/django.wsgi 

    WSGIProcessGroup cubedev.example.com 
    WSGIDaemonProcess cubedev.example.com 

    Alias /media/ /data/hosting/cubedev/media/ 
    Alias /adminmedia/ /opt/python2.6/lib/python2.6/site-packages/django/contrib/admin/media/ 
    Alias /media /data/hosting/cubedev/media 

    <Directory "/data/hosting/cubedev/media"> 
    Order deny,allow 
    Allow from all 
    </Directory> 
</VirtualHost> 
+0

Parece que no está siendo encontrado su .wsgi. –

+0

/data/hosting/cubedev/apache/django.wsgi está de hecho allí ... – David

+0

Cambié los permisos de django.wsgi de 644 a 755 y sigo teniendo el mismo error ... – David

Respuesta

7

SystemError: dynamic module not initialized properly es la excepción que se produce cuando una DLL (o .so) que está siendo cargado no puede ser inicializado correctamente. En la función _PyImport_LoadDynamicModule de Python/importdl.c en caso de que alguien esté interesado.

Ahora, el dll/so en cuestión (el módulo dinámico en Python) es _functools.so que es parte de la biblioteca estándar de Python. Veo que se está cargando desde /opt/python2.6, así que sabemos que este no es el sistema python. Creo que esta no es la python contra la cual se compiló mod_wsgi. Para comprobar si este es el caso, ejecute ldd mod_wsgi.so y observe qué libpython se devuelve.

Por lo tanto mi sugerencia es o recompilar mod_wsgi againast el intérprete en /opt/python2.6 ejecutando en el directorio de origen wsgi_mod

./configure --with-python=/opt/python2.6/bin/python2.6 

o asegúrese de que sys.prefix puntos a la instalación de Python que espera por mod_wsgi estableciendo su valor con el directorio WSGIPythonHome.

actualización después de salida de ldd

La segunda línea en la salida ldd muestra que mod_wsgi carga el pythonlib en /usr/lib en lugar de /opt/python2.6. Para indicar a mod_wsgi que cargue eso en /opt/python2.6, probablemente debería anteponerlo a la variable de entorno LD_LIBRARY_PATH.

Pruebe primero en la línea de comandos:

LD_LIBRARY_PATH=/opt/python2.6/lib:$LD_LIBRARY_PATH ldd mod_wsgi.so 

y luego asegurarse de que el LD_LIBRARY_PATH correcta se especifica en el guión que se inicia Apache.

otra actualización

Vas a tener que depurar la configuración mod_wsgi. Sólo trate con el .wsgi siguiente archivo en lugar de la suya y nos dice lo que se obtiene:

def application(environ, start_response): 
    status = '200 OK' 
    start_response(status, [('Content-type', 'text/plain')]) 

    try: 
     import sys 
     return ['\n'.join([sys.prefix, sys.executable])] 
    except: 
     import traceback as tb 
     return [tb.format_exc()] 

Si lo que se obtiene no es `/ opt/python2.6' , intente con la opción

WSGIPythonHome /opt/python2.6 

Véase también http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives

+0

Además, NO vaya a mezclar manualmente las rutas del módulo de instalación de Python listándolos en WSGIPythonPath, python-path option a WSGIDaemonProcess o mediante cambios manuales a sys.path en script WSGI. La combinación de módulos de diferentes instalaciones de Python puede generar resultados inesperados. –

+0

mod_wsgi ya se compiló con /opt/python2.6. Agregué la salida de ldd anterior. ¿Hubiera alguna otra razón por la cual se lanza el SystemError? – David

+0

Actualicé mi respuesta en respuesta a la salida de ldd. – krawyoti

Cuestiones relacionadas