2010-03-12 8 views
7

CentOS 5 çalıştırıyorum ve mod_wsgi ile çalışan bir django uygulaması almaya çalışıyorum. Ubuntu üzerinde çalışıyorum .wsgi ayarlarını kullanıyorum. Ben de Django uygulaması beri piton (/opt/python2.6/) alternatif yüklemesini kullanıyorum> 2.5 ihtiyacı ve işletim sistemi hatası Burada 2.3CentOS 5 üzerinde mod_wsgi ile çalışmak için django uygulaması almaya çalışıyor

kullanır: burada

[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 

Ve

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) 

sankonun confi /usr/lib/httpd/modules/mod_wsgi.so ldd ait

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() 

çıktı benim .wsgi dosyası 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

görünüyor seçeneği ile deneyin. –

+0

/data/hosting/cubedev/apache/django.wsgi gerçekten orada ... – David

+0

Django.wsgi 'nin izinlerini 644'ten 755'e değiştirdim ve hala aynı hatayı aldım ... – David

cevap

7

SystemError: dynamic module not initialized properly atılır durum olduğunda, bir DLL (ya da bu nedenle) yüklenen düzgün başlatılmamış edilemez ediliyor. Kimsenin ilgilenmesi durumunda _PyImport_LoadDynamicModulePython/importdl.c numaralı fonksiyonda.

Şimdi, dll/böylece söz konusu (Python parliance içinde dinamik modül) Python standart kütüphanenin parçası olan _functools.so olduğunu. Bunun /opt/python2.6 adresinden yüklendiğini görüyorum, bunun sistem python olmadığını biliyoruz. Benim tahminim bu, mod_wsgi'nin derlenmiş olduğu python değil. Durumun bu olup olmadığını kontrol etmek için ldd mod_wsgi.so'u çalıştırın ve libpython'un ne döndüğüne bakın. Bu nedenle

benim öneri ya wsgi_mod kaynak dizininde

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

veya emin olun koşarak /opt/python2.6 yorumlayıcı againast mod_wsgi yeniden derlemek için bu mod_wsgi tarafından beklediğini piton yüklemesine sys.prefix puan değerini WSGIPythonHome dizini ile ayarlama. ldd, çıkış

ldd çıkışı ikinci hat sonra

GÜNCELLEME mod_wsgi /usr/lib yerine /opt/python2.6 içinde pythonlib yükler göstermektedir. Mod_wsgi 'yi /opt/python2.6' a yüklemesi talimatını vermek için muhtemelen LD_LIBRARY_PATH envirnoment değişkenine eklemelisiniz.

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

ve ardından doğru LD_LIBRARY_PATH Apache başlar komut belirtildiğinden emin olun:

komut satırında Önce deneyin.

Henüz başka güncelleme

Sen mod_wsgi yapılandırmasını hata ayıklama gerekecek. Sadece senin yerine aşağıdaki .wsgi dosyayla deneyin ve ne olsun bize:

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()] 

ne olsun değilse `/ opt/python2.6' , senin .wsgi bulundu varlık değildir gibi

WSGIPythonHome /opt/python2.6 

Ayrıca bkz http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives

+0

Ayrıca Python kurulum modülü yollarını elle karıştırmayın WSGIPythonPath, WSGIDaemonProcess için python yolu seçeneği veya WSGI komut dosyasında sys.path el ile yapılan değişiklikler listelenerek. Farklı Python kurulumlarından gelen karıştırma modülleri beklenmedik sonuçlara yol açabilir. –

+0

mod_wsgi zaten /opt/python2.6 ile derlenmiştir. Yukarıdaki ldd çıktısını ekledim. SystemError'un neden atılmasının başka bir sebebi var mı? – David

+0

ldd çıktısına yanıt olarak cevabımı güncelledim. – krawyoti

İlgili konular