没有显示 Apache 和 mod_wsgi 的 Ubuntu VM 上托管的 Django 应用程序

Posted

技术标签:

【中文标题】没有显示 Apache 和 mod_wsgi 的 Ubuntu VM 上托管的 Django 应用程序【英文标题】:Django application hosted on Ubuntu VM with Apache and mod_wsgi not showing up 【发布时间】:2014-08-05 15:55:46 【问题描述】:

我已经上传了我的第一个 Django 应用程序,但我无法访问它。该应用程序名为survey,并已上传到运行Apachemod_wsgiUbunto VM。我的虚拟机已通过 http://phaedrus.scss.tcd.ie/bias_experiment 的代理通行证公开

根据下面的urls.py 文件,该调查应该在http://phaedrus.scss.tcd.ie/bias_experiment/surveythree/ 可用,当我在本地访问它时,它可以在http://127.0.0.1:8000/surveythree/ 使用

我最近发布了两个与(1)(2)相关的问题,并在相关问题上得到了很多帮助。但是该应用程序仍然不可见,我不明白为什么。

我采取的步骤

已将项目上传到/var/www/(项目结构如下) 已安装 virtualenv 已安装 mod_wsgi 安装了任何其他相关的包 创建了虚拟主机文件(下) 创建了 index.wsgi 文件(下) 重启 apache 跑a2ensitea2ensite bias_experiment 重启 apache

但是,当用户访问 http://phaedrus.scss.tcd.ie/bias_experiment/surveythree/ 时,他们会得到一个 Apache 404 错误页面,访问 http://phaedrus.scss.tcd.ie/bias_experiment/ 会向他们显示文件系统,

然后我通过将以下内容添加到 /etc/apache2/sites-available/default 来添加到 wsgi 文件的直接链接

WSGIScriptAlias /bias_experiment/ /var/www/bias_experiment/src/bias_experiment/index.wsgi

现在当用户访问http://phaedrus.scss.tcd.ie/bias_experiment/ 时,他们至少看到 Django 正在运行。但是访问 http://phaedrus.scss.tcd.ie/bias_experiment/surveythree/ 仍然会导致 Apache 404 错误页面。

谁能看到我的设置有什么问题?我遵循了多个教程并对此进行了广泛研究,但无法弄清楚。

以下是我的设置请随时索取任何其他详细信息。

谢谢

我的 VirtualHost 文件位于 /etc/apache2/sites-available/bias_experiment

<VirtualHost *:80>
ServerAdmin myemail@gmail.com
ServerName phaedrus.scss.tcd.ie/bias_experiment
ServerAlias phaedrus.scss.tcd.ie
WSGIScriptAlias /bias_experiment/ /var/www/bias_experiment/src/bias_experiment/index.wsgi

Alias /static/ /var/www/bias_experiment/src/bias_experiment/static/
<Location "/static/">
    Options -Indexes
</Location>
</VirtualHost>

我的 index.wsgi 文件位于 /var/www/bias_experiment/src/bias_experiment/index.wsgi

import os
import sys
import site

# This was kept in order to add the src folder
sys.path.append('/var/www/bias_experiment/src')
sys.path.append('/var/www/bias_experiment/src/bias_experiment')

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

# Activate your virtual env
activate_env=os.path.expanduser("/var/www/bias_experiment/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))

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

我的 urls.py 文件位于 /var/www/bias_experiment/src/bias_experiment/urls.py

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),   
    url(r'^surveythree/$', SurveyWizard.as_view([SurveyForm1, SurveyForm2, SurveyForm3, SurveyForm4, SurveyForm5])),   
)

我的 Apace 错误日志 tail /var/log/apache2/error.log

(bias_experiment)spillab@kdeg-vm-18:/var/www/bias_experiment$ sudo tail /var/log/apache2/error.log
[Sun Jun 15 17:37:26 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
[Sun Jun 15 17:37:50 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
[Sun Jun 15 18:38:11 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
[Sun Jun 15 18:39:53 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
[Sun Jun 15 18:40:00 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
[Sun Jun 15 18:40:01 2014] [error] [client 134.226.38.233] Target WSGI script not found or unable to stat: /var/www/bias_experiment/src/bias_experiment/index.wsgisurveythree
(bias_experiment)spillab@kdeg-vm-18:/var/www/bias_experiment$ 

我的项目结构

谢谢!

【问题讨论】:

【参考方案1】:

我认为虚拟主机是一个非启动器,因为您使用的服务器名称是该服务器的 main 名称。所以我们可能可以完全删除它,我们需要专注于/sites-available/default 中的内容。而且我认为唯一的错误是我们不需要在别名中使用斜杠:

WSGIScriptAlias /bias_experiment /var/www/bias_experiment/src/bias_experiment/index.wsgi

(我之前可能在这方面误导了你,但这次我在 mod_wsgi 文档中直接从作者 Graham Dumpleton 那里找到了建议。)

【讨论】:

非常感谢。现在效果很好,对于像我这样的初学者来说有点费力,但在你的帮助下变得容易多了,而且我有一个未来的模板。我只需要设置我从code.djangoproject.com/wiki/NewbieMistakes 文档中记得的数据库的读/写权限。 酷,很高兴你能成功。对于数据库,您可能需要考虑迁移到真正的 rdbms,如 mysql 或 postgres,而不是搞乱 sqlite 文件权限。 谢谢,我去看看。

以上是关于没有显示 Apache 和 mod_wsgi 的 Ubuntu VM 上托管的 Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Django/mod_wsgi/Apache - mod_wsgi 没有使用为其编译的 Python 版本 - “ModuleNotFoundError: No module named 'math'

Apache + mod_wsgi 与 nginx + gunicorn

Django + mod_wsgi + apache2 - 子进程 XXX 仍然没有退出,发送一个 SIGTERM

有没有人设法在 Mac OS X Leopard 上为 apache 编译 mod_wsgi?

Apache Django mod_wsgi - 没有名为 urls 的模块错误

Django/Apache 使用 mod_wsgi 冻结