簡體   English   中英

mod_wsgi python2.5 ubuntu 11.04問題

[英]mod_wsgi python2.5 ubuntu 11.04 problem

我在使用ubuntu 11.04的amd64平台上有這樣的cfg:

  1. 從源代碼構建python2.5到/usr/local/python2.5
  2. 在/home/se7en/.virtualenvs/e-py25上的virtualenv

我將mod_wsgi.so重新編譯為自定義python:

se7en@se7en-System-Product-Name:~$ 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 admin@wsgi.debianworld.ru
    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卻不能。 請幫忙)

Linux盒子上操作系統提供的Python版本針對UCS4 Unicode字符寬度進行了編譯。 如果您是從源代碼構建的,則除非您未明確說明,否則它將默認為UCS2。 結果是您的系統Python 2.5和/ usr / local下的本地版本期望Unicode字符具有不同的寬度,並且由於Unicode函數將UCS類型作為名稱的一部分,所以當您使用為一個Python編譯的對象與另一個Python一起編譯時,您會收到Unicode函數的未定義錯誤。

之所以如此,正如其他答案所暗示的那樣,是mod_wsgi.so實際上是在選擇系統范圍的UCS4 libpython2.5.so文件,而不是在/ usr / local / lib下的UCS2 Python。 盡管您可以設置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

通過在調用“ make”時在命令上將LD_RUN_PATH設置為環境變量,鏈接器會將/ usr / local / lib嵌入到直接到mod_wsgi.so的庫搜索路徑中。 這樣,它將在運行時找到正確的libpython2.5.so,而無需設置LD_LIBRARY_PATH。 您可以通過在生成的mod_wsgi.so上運行“ ldd”來確認它是否工作,然后應從/ usr / local / lib中選擇正確的庫。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM