【问题标题】:Django with Apache 500 Error带有 Apache 500 错误的 Django
【发布时间】:2013-11-28 09:26:21
【问题描述】:

我已经在 Apache 上设置了 mode_wsgi,它工作正常,但是当我尝试在其上部署 Django 时,我得到 500 Internal server error。以下是我从 Apache 错误日志中获得的跟踪信息

[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1] mod_wsgi (pid=8212): Target WSGI          script 'H:/DEV/python/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1] mod_wsgi (pid=8212): Exception occurred processing WSGI script 'H:/DEV/python/mysite/mysite/wsgi.py'.
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1] Traceback (most recent call last):
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "H:/DEV/python/mysite/mysite/wsgi.py", line 13, in <module>
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     from django.core.wsgi import get_wsgi_application
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\core\\wsgi.py", line 1, in <module>
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     from django.core.handlers.wsgi import WSGIHandler
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\core\\handlers\\wsgi.py", line 11, in <module>
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     from django.core.handlers import base
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\core\\handlers\\base.py", line 12, in <module>
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     from django.db import connections, transaction
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\db\\__init__.py", line 83, in <module>
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     signals.request_started.connect(reset_queries)
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\dispatch\\dispatcher.py", line 88, in connect
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     if settings.DEBUG:
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\conf\\__init__.py", line 54, in __getattr__
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     self._setup(name)
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\conf\\__init__.py", line 49, in _setup
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     self._wrapped = Settings(settings_module)
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]   File "C:\\Python27\\lib\\site-packages\\django\\conf\\__init__.py", line 132, in __init__
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1]     % (self.SETTINGS_MODULE, e)
[Thu Nov 28 12:14:40 2013] [error] [client 127.0.0.1] ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named mysite.settings

对此的任何帮助将不胜感激。谢谢

这里是网站的 apache conf

WSGIScriptAlias / "H:/DEV/python/mysite/mysite/wsgi.py"
WSGIPythonPath "H:/DEV/python/mysite:C:/Python27/Lib/site-packages"

<Directory "H:/DEV/python/mysite">
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

这是wsgi文件中的代码

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

【问题讨论】:

  • 发布您网站的 apache conf 以及路径和 wsgi 文件等其他数据
  • 错误日志中问题的答案是什么? sys.path上吗?
  • @juliocesar 我已经添加了额外的数据

标签: django apache mod-wsgi


【解决方案1】:

将此添加到 wsgi 脚本:

import sys
sys.path.append('H:/DEV/python/mysite')

放在 os.environ 部分之前

【讨论】:

  • 当然可以。请注意,juliocesar 的答案虽然不是您当前问题的答案,但仍然是正确的,您应该按照他的建议更改您的 directory 标签
  • @yuvi 对不起,但我认为你错了,实际上我的项目没有 sys.path,因为在 apache 配置中,您将 WSGIPythonPath 定义为示例:WSGIPythonPath "H:/DEV/python/mysite:C:/Python27/Lib/site-packages" 你不需要指定系统路径
  • 根据我的经验,当项目被移动时(通常是移动到生产服务器时),您需要按字面意思指定它。所以一个项目肯定可以没有 sys.path 存在,但有时你确实需要它。
  • @yuvi django 文档没有谈论这种做法(你在答案中发布),而且你也没有发现自动生成的 wsgi.py 文件没有添加有点奇怪路径?所以如果它需要(至少在某些情况下)那么是一个 django 错误?但我发现了这个code.djangoproject.com/ticket/18496
  • 所以即使这应该解决问题,这也不是最好的解决方案;)
【解决方案2】:

经过一番搜索,我想我终于找到了真正的问题:

apache config 中的WSGIPythonPath 指令错误,您需要将: 更改为;,因为您在Windows 上,所以它必须看起来像:

WSGIPythonPath "H:/DEV/python/mysite;C:/Python27/Lib/site-packages"

这就是为什么您的 wsgi 没有找到您的站点设置的原因,这是处理此问题的正确方法。使用此修复程序,您无需修改​​自动生成的 wsgi 文件以将您的站点添加到 sys.path 中(如他的回答中建议的@yuvi),因为它是多余的(添加 sys.path 是 WSGIPythonPath 所做的) 而不是最佳做法。

(更多关于wsgi docs

你也应该改变这个:

<Directory "H:/DEV/python/mysite">

作者:

<Directory "H:/DEV/python/mysite/mysite">

【讨论】:

  • 我认为他需要结合我们的答案
【解决方案3】:

我刚刚遇到了同样的问题。编辑 apache conf 文件 'http.conf' 并将您的站点包路径添加到 WSGIPythonPath 可能会有所帮助。如下:

    WSGIPythonPath "c:/Users/mysite;c:/Users/yoursite"

查看django docs的更多详情

特别是,Windows 上目录名称之间的路径分隔符是 ;,而不是 UNIX 系统上的 :

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多