【问题标题】:django + mod_wsgi +apachedjango + mod_wsgi +apache
【发布时间】:2010-03-10 20:54:21
【问题描述】:

当我使用 mod_wsgi 在 apache 上运行我的 django 项目时,我收到类似的信息:

    [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145] Traceback (most recent call last):
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/core/handlers/wsgi.py", line 245, in __call__
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     response = middleware_method(request, response)
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/middleware.py", line 28, in process_response
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     if request.session.get_expire_at_browser_close():
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 229, in get_expire_at_browser_close
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     if self.get('_session_expiry') is None:
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 63, in get
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     return self._session.get(key, default)
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 172, in _get_session
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     self._session_cache = self.load()
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/backends/db.py", line 18, in load
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     return self.decode(force_unicode(s.session_data))
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg/django/contrib/sessions/backends/base.py", line 93, in decode
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     encoded_data = base64.decodestring(session_data)
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]   File "/usr/local/lib/python2.6/base64.py", line 321, in decodestring
        [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145]     return binascii.a2b_base64(s)
 [Wed Mar 10 08:46:43 2010] [error] [client 10.13.1.145] Error: Incorrect padding

有什么建议、线索或解决办法吗?

【问题讨论】:

    标签: django apache mod-wsgi


    【解决方案1】:

    听起来django_session 表中的条目之一可能格式不正确。检查表格并删除损坏的行,或者如果您可以忍受的话,您可以完全截断表格。

    【讨论】:

    • 通常在开发服务器上工作正常。第一次运行时出现错误。 syncdb 只是在第一次测试之前完成的事情
    • 问题出在数据库上。谢谢
    【解决方案2】:

    以下是一些推荐地点:

    1. 您在回溯中的路径指向/usr/local/lib/python2.6/ ...也许您使用不同版本的 Python 构建了mod_wsgi,尤其是可能在/usr/lib/pythonX.X 中的系统安装版本。在构建mod_wsgi 时,你需要使用这个:

      ./configure --with-python=/usr/local/bin/python2.6

    2. 检查您的 apache 错误日志以查看其中是否有任何有用的消息,尤其是记录在 mod_wsgi Installation Issues 的消息。

    3. 当您运行 syncdb 时,即使是“第一次”,您是否看到有关正在创建的身份验证表的消息?也许您的数据库中仍然有一个旧的身份验证表,并且可以通过完全删除数据库并从头开始来解决问题(或执行类似manage.py reset

    【讨论】:

    • 关于 (1),如果 mod_wsgi 是针对系统 Python 构建的,它应该在运行时发现它没问题。这是另一种方式,通常是编译为使用备用版本但在运行时仍然找到系统的问题。它正在使用 /usr/local 版本表明这不是问题,除非他们犯了以某种方式手动设置 sys.path 的错误,以便它在安装目录中查找与构建 mod_wsgi 不同的 Python 版本为了。因此,混合安装可能是一个问题,但它会要求它们引起问题。
    • 问题出在数据库上。感谢您的帮助
    • 向前看,有时像 Track 这样的其他应用程序会使用 mod_python 而不是 mod_wsgi。当 mod_python 加载我们期望运行 mod_wsgi 的其他 python 实例时可能会出现问题
    猜你喜欢
    • 2012-03-17
    • 2013-02-12
    • 2014-11-29
    • 1970-01-01
    • 2012-11-04
    • 2011-07-14
    • 2016-03-15
    • 2014-09-20
    • 2011-11-23
    相关资源
    最近更新 更多