【问题标题】:django application works on development server but I get 404 on Apachedjango 应用程序在开发服务器上工作,但我在 Apache 上得到 404
【发布时间】:2011-01-07 04:20:41
【问题描述】:

我认为开发服务器和 Apache 作为我的 Web 服务器都可以使用相同的机制,但我目前真的很困惑。

我可以在使用 Django 开发服务器时访问 URL,如下所示

__http://devserver/my_application/

当我将 Web 服务器切换到 Apache 时,我收到所有 URLs.py 条目的 Django 404 错误。

尝试访问 __http://devserver/ 会返回以下内容

Using the URLconf defined in antrum.urls, Django tried these URL patterns, in this order:
^my_application/$
^my_application/?page=(?P<page>\d+)
^my_application/new
^my_application/(?P<candidate_id>\d+)/$
^my_application/(?P<candidate_id>\d+)/update/$
^my_application/(?P<candidate_id>\d+)/delete/$
^my_application/search/$
^admin/doc/
^admin/
The current URL, , didn't match any of these.

尝试访问 http://devserver/my_application/ 会产生以下输出

{'path': u'my_application/'}

我可能犯了一个蹩脚的错误,但现在看不到。我可能没有检查什么?

这是我的 Apache 配置

<Location "/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE project.settings
    PythonOption django.root /
    PythonDebug On
    PythonPath "['/home/user/','/home/user/project/'] + sys.path"
</Location>

<Location "/media/">
    SetHandler None
</Location>  

这是我的发现:

  • 切换到 manage.py runserver 解决了我的问题
  • Apache Error.log 没有条目
  • 当我为 pythonpath 设置环境变量并使用 python CLI 时,我可以访问我的模型,恕我直言,这也离开了 python 路径选项
  • __http://devserver/my_application 和 __http://devserver/my_appTYPO 给出相同的错误消息,但 {u'path': ...} 输出不同

【问题讨论】:

  • error.log 看起来很干净 >> [Thu Jan 06 19:48:52 2011] [notice] mod_python: using mutex_directory /tmp [Thu Jan 06 19:48:52 2011] [notice] Apache /2.2.16 (Ubuntu) mod_python/3.3.1 Python/2.6.6 已配置——恢复正常操作
  • access.log 看起来也很干净,我看到了我的 GET 请求
  • 这完全发生在 django 级别。我怀疑 urls.py 或我的 pythonpath。到目前为止没有运气......
  • 我怀疑这发生在 Django 级别,因为它与开发服务器一起工作正常。你的 Apache 配置是什么样的?
  • "切换到 manage.py runserver 解决了我的问题" 什么?你不能在生产中运行它。那么它是如何成为“解决方案”的呢?请非常具体地说明您认为这“解决”了您的问题的原因。

标签: django


【解决方案1】:

在网站根目录挂载时不要设置 django.root 变量。这只应在安装在子 URL 的情况下使用。

【讨论】:

    【解决方案2】:

    尝试使用 mod_wsgi 而不是 modpython。如果您有同样的问题,请修改您的观点,尤其是 HttpResponse 对象(mimetype 参数)。无论如何,在 django 1.3 发布后将不再支持 modpython,我认为最好永远离开 modpython

    【讨论】:

    • 我将在我的生产环境中使用 mod_wsgi。谢谢提醒
    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2018-03-01
    • 2021-04-15
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多