我想在Apache和mod_wsgi的Ubuntu服务器中部署我的django应用程序。我正在学习本教程 http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/
在我的网站文件中
<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
ServerName mydomain.com
ServerAlias www.mydomain.com
WSGIScriptAlias / var/www/index.wsgi
Alias /static/ /var/www/static/
<Location "/static/">
Options -Indexes
</Location >
</VirtualHost >
不介意通用的mydomain.com条目。该网站仅供进度显示,因此我可以与我的朋友讨论。
我有这个import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('/home/voger/venvs/ssite/local/lib/python2.7/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('/home/voger/projects/ssite')
sys.path.append('/home/voger/projects/ssite/ssite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ssite.settings'
# Activate your virtual env
activate_env=os.path.expanduser("/home/voger/venvs/ssite/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
在我的settings.py中我有两行用于在登录和注销后重定向。这些不是在index.wsgi
之前添加的LOGIN_REDIRECT_URL = '/login_redirect'
ACCOUNT_LOGOUT_REDIRECT_URL = "/logout_redirect"
当请求这些网址时,它会返回404
Reverse for 'login_redirect' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
在我的HTML中,我有4个链接
<a id="logout" style="display: inline-block;" href="/index.wsgi/accounts/logout/">Logout</a>
<a id="profile" style="display: inline-block;" href="/accounts/profile">My Account</a>
<a id="signup" style="display: none;" href="/index.wsgi/accounts/signup/">Sign Up</a>
<a id="login" style="display: none;" href="/index.wsgi/accounts/login/">Sign In</a>
正如您所看到的那样,使用{%url%}插入的3个条目会自动添加到/index.wsgi中,而唯一一个硬编码的条目不会被添加到前面。但他们仍然按预期工作。
为什么我要预先添加/index.wsgi,如何将其删除?在我的开发机器上使用django的内置服务器一切正常。
我不知道它是否相关,但登录,注销和注册网址是由django-allauth提供的。
感谢您的任何回答或评论
答案 0 :(得分:1)
首先:
WSGIScriptAlias / var/www/index.wsgi
错了。您缺少WSGI脚本路径上的前导斜杠。
你也不应该像在可能的情况下那样坚持在DocumentRoot目录中使用index.wsgi。如果由于某种原因没有使用带有WSGIScriptAlias的VirualHost,并且已经在Apache配置中的其他地方设置了wsgi-script的.wsgi处理程序,则意味着/index.wsgi的URL可以用你所有的访问你的Django问题然后从那里开始。这是因为Django会认为它的前缀是带有/index.wsgi的URL,因为它最终成为应用程序的挂载点。
因此,将WSGI脚本文件移出服务器的DocumentRoot目录。删除.wsgi扩展名的任何AddHandler指令。确保您实际使用的是VirtualHost,特别是WSGIScriptAlias指令的使用是正确的。
顺便说一句,你为什么要使用一些任意人的博客文章而不是Django docs网站上的官方mod_wsgi安装说明。