2011-06-22 74 views
1

我有我的AMD64平臺這樣的CFG與Ubuntu 11.04:從源的python2.5的mod_wsgi的ubuntu 11.04的問題

  1. 的python2.5建立在/ home轉移到/usr/local/python2.5
  2. 的virtualenv /se7en/.virtualenvs/e-py25

ALSP我mod_wsgi.so重新編譯自定義的Python:

[email protected]:~$ ldd /usr/lib/apache2/modules/mod_wsgi.so 
    linux-vdso.so.1 => (0x00007fff5af6c000) 
    libpython2.5.so.1.0 => /usr/lib/libpython2.5.so.1.0 (0x00007f7bed14b000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7becf2d000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7becd28000) 
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f7becb25000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7bec8a0000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7bec50b000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f7bed717000) 

django.wsgi

#/usr/local/python2.5/bin/python 
# -*- coding: utf-8 -*- 
import os, sys 
sys.stdout = sys.stderr 


dn = os.path.dirname 
PROJECT_ROOT = os.path.abspath((dn(__file__))) 

#DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, 'apps') 
DJANGO_PROJECT_ROOT = PROJECT_ROOT 

sys.path.insert(0, '/usr/local/python2.5/lib/python2.5/site-packages') 
sys.path.insert(0,'/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages') 
sys.path.insert(0, DJANGO_PROJECT_ROOT) 


os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

print sys.version #return 2.5.5 (r255:77872, Apr 15 2011, 22:12:51 
print sys.path 

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

Apache站點配置:

<VirtualHost 192.168.1.3> 

    ServerAdmin [email protected] 
    ServerName wsgi.debianworld.ru 


    ErrorLog /home/se7en/workspace/lxchg/logs/error_log 
    CustomLog /home/se7en/workspace/lxchg/logs/access_log common 



    WSGIScriptAlias//home/se7en/workspace/lxchg/django.wsgi 






    Alias "/media/" "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/contrib/admin/media/" 
    <Location "/media/"> 
     SetHandler None 
    </Location> 

    Alias "/main_media/" "/home/se7en/workspace/lxchg/main_media/" 
    <Location "/main_media/"> 
     SetHandler None 
    </Location> 
</VirtualHost> 
WSGIPythonHome /home/se7en/.virtualenvs/e-py25 
#WSGIPythonExecutable /usr/local/python2.5/bin/python 

我在錯誤日誌中得到了一個錯誤:

[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] mod_wsgi (pid=2955): Exception occurred processing WSGI script '/home/se7en/workspace/lxchg/django.wsgi'. 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] Traceback (most recent call last): 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 248, in __call__ 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  response = self.get_response(request) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/core/handlers/base.py", line 141, in get_response 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  return self.handle_uncaught_exception(request, resolver, sys.exc_info()) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/core/handlers/base.py", line 176, in handle_uncaught_exception 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  if resolver.urlconf_module is None: 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/core/urlresolvers.py", line 239, in _get_urlconf_module 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  self._urlconf_module = import_module(self.urlconf_name) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/utils/importlib.py", line 35, in import_module 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  __import__(name) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "C:\\workspace\\sdl\\lxchg\\urls.py", line 3, in <module> 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/views/generic/create_update.py", line 1, in <module> 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  from django.forms.models import ModelFormMetaclass, ModelForm 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/forms/__init__.py", line 17, in <module> 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  from models import * 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/forms/models.py", line 6, in <module> 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  from django.db import connections 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/db/__init__.py", line 77, in <module> 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  connection = connections[DEFAULT_DB_ALIAS] 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/db/utils.py", line 92, in __getitem__ 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  backend = load_backend(db['ENGINE']) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] File "/home/se7en/.virtualenvs/e-py25/lib/python2.5/site-packages/django/db/utils.py", line 50, in load_backend 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  raise ImproperlyConfigured(error_msg) 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] ImproperlyConfigured: 'django.db.backends.mysql' isn't an available database backend. 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] Try using django.db.backends.XXX, where XXX is one of: 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3]  'dummy', 'mysql', 'oracle', 'postgresql', 'postgresql_psycopg2', 'sqlite3' 
[Wed Jun 22 13:45:54 2011] [error] [client 192.168.1.3] Error was: /home/se7en/.virtualenvs/e-py25/lib/python2.5/lib-dynload/array.so: undefined symbol: PyUnicodeUCS2_FromUnicode 

然後,我通過manage.py啓動項目的runserver它的工作原理,但通過做的mod_wsgi不。 請幫忙)

回答

2

在Linux機器上提供的操作系統Python版本編譯爲UCS4 Unicode字符寬度。如果你從源代碼構建,如果你沒有明確地說,否則它將默認爲UCS2。結果是,您的系統Python 2.5和/ usr/local下的本地版本對Unicode字符需要不同的寬度,並且因爲Unicode函數具有UCS類型作爲名稱的一部分,所以當您使用爲另一個Python編譯的對象時, Unicode函數會出現未定義的錯誤。

爲什麼發生這種情況,正如其他答案所暗示的那樣,mod_wsgi.so實際上是在系統範圍內選擇UCS4 libpython2.5.so文件,而不是UCS2 Python在/ usr/local/lib下的文件。儘管你可以設置LD_LIBRARY_PATH來讓進程先查看/ usr/local/lib,但在Apache下這是一件很痛苦的事情。相反,你應該做的是再次重建從源代碼mod_wsgi的和做的事:

make distclean 
./configure --with-python=/usr/local/bin/python2.5 
LD_RUN_PATH=/usr/local/lib make 
sudo make install 

通過設置LD_RUN_PATH用作命令環境變量調用「製作」時,連接器將嵌入在/ usr/local/lib目錄到庫搜索路徑直接導入mod_wsgi.so。這樣它就可以在運行時找到正確的libpython2.5.so,而無需設置LD_LIBRARY_PATH。您可以通過在生成的mod_wsgi.so上運行'ldd'來確認它是否工作正常,然後應該從/ usr/local/lib中選擇正確的庫。

1

它加載系統的Python。您需要使用$LD_LIBRARY_PATH將其指向VE Python。有關詳細信息,請參見ld.so(8)手冊頁。