这是我最近开始设置的个人开发服务器。尽管 Python 可以作为 cgi 运行,并且 Python 中的独立测试脚本运行良好,但 Django 似乎无法正常工作。我看到的只是浏览器中 django 文件的目录列表。任何帮助都将不胜感激。
我的虚拟主机:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
#DocumentRoot /var/www
DocumentRoot /home/aj/public_html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
#<Directory /var/www/>
<Directory /home/aj/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddHandler mod_python .py
#PythonHandler mod_python.publisher
PythonHandler mod_python.cgihandler
PythonDebug On
</Directory>
<Location "/home/aj/public_html/old/testing/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE testing.settings
PythonOption django.root /testing
PythonDebug On
</Location>
#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#<Directory /usr/lib/cgi-bin/>
#ScriptAlias /cgi-bin/ /var/www/cgi-bin/
#<Directory /var/www/cgi-bin/>
ScriptAlias /bin/ /home/aj/public_html/
<Directory /home/aj/public_html/>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
我使用安装了 Django
sudo apt-get install python-django
答案1
以下是我建议的做法:
确保您已安装并启用 mod_python:
$ sudo apt-get 安装 libapache2-mod-python $ sudo a2enmod python $ sudoinvoke-rc.d apache2 重启
将站点特定的配置条目放入单独的虚拟主机配置文件中:
$ cd /etc/apache2/sites-available $ sudo cp 默认 python-site $ sudo a2ensite python-site
- 尝试注释掉 CGI 特定的设置,保留非 CGI 设置,看看它们是否
- 删除
ScriptAlias /bin/ /home/aj/public_html/
行 - 从部分中删除
+ExecCGI
选项<Directory /home/aj/public_html/>
AddHandler mod_python .py
从<Directory /home/aj/public_html/>
部分中删除PythonHandler mod_python.cgihandler
从<Directory /home/aj/public_html/>
部分 中删除
- 删除
确保
/home/aj/public_html/old
它在你的 PYTHONPATH 中,你可能需要按如下方式添加它:<Location "/home/aj/public_html/old/testing/"> SetHandler python-program PythonHandler django.core.handlers.modpython PythonPath "['/home/aj/public_html/old'] + sys.path" PythonOption django.root /testing PythonDebug On SetEnv DJANGO_SETTINGS_MODULE testing.settings </Location>
不要忘记重新加载配置以使更改生效:
$ sudoinvoke-rc.d apache2重新加载
此外,正如 topdog 已经提到的,我建议转向 mod_wsgi 或 fcgi,而不是被认为已弃用的 mod_python。
答案2
改变:
<Location "/home/aj/public_html/old/testing/">
到:
<Location "/testing">
这指的是安装它的 URL,而不是物理目录。
您还缺少 PythonPath 指令,因此 Python 知道在哪里找到您的 Django 站点。
您随后访问的 URL 是“http://localhost/测试'. 如果不是运行浏览器的机器,请将“localhost”替换为主机名。
您是否阅读过 Django 网站上有关 mod_wsgi 部署的 Django 文档?