【问题标题】:Hooking Django App to subdirectory using mod_wsgi and apache on Centos 5在 Centos 5 上使用 mod_wsgi 和 apache 将 Django 应用程序连接到子目录
【发布时间】:2016-08-16 18:39:12
【问题描述】:

背景:

我正在为我的办公室将 Django 应用程序投入生产。到目前为止,该应用程序已经开发并运行,所有需要做的就是部署所述应用程序。不幸的是,这项任务比开发应用程序本身更麻烦。我正在使用 Apache 2.2、mod_wsgi 3.3 以及 virtualenv 中的 Python 2.7 和 Django 1.9 开发 Centos 5.11 服务器。

问题

我遇到的问题是将 Django 应用程序连接到我的域的子目录 (www.abc.example.com/FR/) 但在配置 apache 的 httpd.conf 时遇到问题,而我添加的设置似乎没有得救。我已经按照 httpd.conf 的 cmets 运行了以下命令,以确保在重新启动时保存更改:

/usr/local/cpanel/bin/apache_conf_distiller --update 
/usr/local/cpanel/bin/build_apache_conf

我使用的指南引导我找到以下代码: * 注意 '~' 代表 /home/[username]

httpd.conf

LoadModule wsgi_module extramodules/mod_wsgi.so

...

WSGIScriptAlias /FR ~/public_html/FR/django.wsgi
WSGIPythonPath ~/public_html/FR

<Directory ~/mydjango/IFTP>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

django.wsgi 在 ~/public_html/FR/django.wsgi

import os
import sys

sys.path.append('~/mydjango')
sys.path.append('~/mydjango/IFTP')

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

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

wsgi.py 在 ~/mydjango/IFTP/wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "IFTP.settings")

application = get_wsgi_application()

编辑 1:

抱歉,我应该进一步说明问题是这些设置没有生效。当我访问 www.abc.example.com/FR/ 时遇到 404 未找到,因此 wsgi 脚本配置错误或设置不正确,这是我需要帮助的地方。

【问题讨论】:

  • 同时拥有 django.wsgi 和 wsgi.py 是没有意义的。您已经在 django.wsgi 中指出了 Apache;因此不使用另一个文件。
  • 但是您还没有真正说出问题所在。 “我添加的设置似乎没有保存”是什么意思?
  • 一个单独的 WSGI 脚本文件仍然很有用,您需要在 sys.path 中设置目录或特定于部署类型的环境变量,当添加到 wsgi.py 时会干扰运行应用程序在一个单独的环境下。
  • @DanielRoseman,我很抱歉,问题是完成所有这些后,我在访问 www.abc.example.com/FR/ 时仍然遇到 404。 Apache 已在保存这些设置的情况下重新启动,但我无法判断是上述设置不正确还是存在导致 404 的某些服务器端错误。
  • 判断404是否来自Django,在Django设置模块中临时设置DEBUG=True。如果是 Django 并且您的 urls.py 未正确设置请求的传递方式,这将在浏览器中生成非常漂亮的响应。您的 urls.py 不应该有 FR 以上 Apache 配置的前导 URL 模式。

标签: python django apache wsgi


【解决方案1】:

四处搜索后,我发现问题出在 django.wsgi 文件中,该文件提供了不必要的额外层。我将我的 httpd.conf 文件更改为下面的代码,进一步指定了我的 virtualenv 的路径并链接到 wsgi.py 文件。

LoadModule wsgi_module extramodules/mod_wsgi.so

WSGIScriptAlias /FR ~/mydjango/IFTP/wsgi.py
WSGIPythonPath "~/mydjango/lib/python2.7/site-packages:~/mydjango"
WSGIPythonHome ~/mydjango

<Directory ~/mydjango/IFTP>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

【讨论】:

猜你喜欢
  • 2011-01-26
  • 2014-03-02
  • 2012-12-20
  • 2017-01-24
  • 2012-03-17
  • 2019-05-16
  • 1970-01-01
  • 2012-07-15
  • 2016-02-09
相关资源
最近更新 更多