无法使用 mod-wsgi 在 Apache 上部署 django

Posted

技术标签:

【中文标题】无法使用 mod-wsgi 在 Apache 上部署 django【英文标题】:Cannot deploy django on Apache with mod-wsgi 【发布时间】:2014-11-24 12:12:10 【问题描述】:

我一直在开发一个准备转移到生产服务器的 Django 应用程序。我安装了 Apache 和 mod_wsgi,我使用了一个测试来检查它是否一切正常,并且确实如此。但是现在我在让它与 Django 一起工作时遇到了问题。

我已经创建了 wsgi.py 文件:

import os
import os.path
import sys


sys.path.append('/var/www/html/mideastinfo/lib/python2.7/site-packages/django/bin/mideastinfo')
#os.environ['PYTHON_EGG_CACHE'] = 'path to a directory for egg cache'
os.environ['DJANGO_SETTINGS_MODULE'] = 'mideastinfo.settings'

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

我通过 WGSIScriptAlias 将 http.conf 指向它。它不起作用,我知道它与 sys.path 有关,我不知道该怎么做。

我有一个开发环境,我在其中完成了所有构建。然后,我将所有项目依赖项安装到服务器用户 pip 和一个 requirements.txt 上。然后,我移动了我的项目文件。但我认为我把所有的映射和​​路径都弄错了。有任何想法吗?我觉得我离完成这件事只有一步之遥。

【问题讨论】:

application = django.core.handlers.wsgi.WSGIHandlers() [Mon Sep 29 19:13:07 2014] [error] [client 157.55.39.217] AttributeError: 'module' object has no attribute 'WSGIHandlers' 当你 >python manage.py shell 和 import django.core.handlers.wsgi 会发生什么? 没什么,没有反应 你在“通往项目根的路径”上放了什么?您的项目在 /var/www/html/mideastinfo/lib/python2.7/site-packages/django/bin/mideastinfo 内吗?你把 wsgi.py 放在哪里了? 是的,你引用的是我作为项目根目录的路径。我认为这就是问题所在。 wsgi.py 文件位于 var/www/html/wsgi.py 【参考方案1】:

我将分享我如何配置一个简单的示例:

import os,sys
apache_configuration = os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('PATH TO YOUR PROJECT ROOT')

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

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

在 Apache 配置的 VirtualHost 指令上,您必须:

WSGIScriptAlias / /PATH/TO/YOUR/.wsgi

例子:

<VirtualHost *:80>
    ErrorLog /home/user/logs/error.log
    ...
    WSGIScriptAlias / /PATH/TO/YOUR/.wsgi
    ...
</VirtualHost>

【讨论】:

这有帮助。我移动了一些东西并收紧了项目路径。另外,我意识到对于我的版本,最后两行已被弃用,因此我使用 from django.core.wsgi import get_wsgi_application application = get_wsgi_application()

以上是关于无法使用 mod-wsgi 在 Apache 上部署 django的主要内容,如果未能解决你的问题,请参考以下文章

centos6.5+python2.7+flask+apache+mod-wsgi部署

Django项目部署到Apache服务器上

NameError:名称“TypeError”未在 Apache 日志中定义

在 Apache 上安装 Python

Django 1.7 在 mod-wsgi 上的代码更改监控出现故障

网站部署 Django+Apache