【发布时间】: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 模式。