Ubuntu + Apache2 +mod_python 上的 Django 安装

Ubuntu + Apache2 +mod_python 上的 Django 安装

这是我最近开始设置的个人开发服务器。尽管 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

以下是我建议的做法:

  1. 确保您已安装并启用 mod_python:

    $ sudo apt-get 安装 libapache2-mod-python
    $ sudo a2enmod python
    $ sudoinvoke-rc.d apache2 重启
    

  2. 将站点特定的配置条目放入单独的虚拟主机配置文件中:

    $ cd /etc/apache2/sites-available
    $ sudo cp 默认 python-site
    $ sudo a2ensite python-site
    

  3. 尝试注释掉 CGI 特定的设置,保留非 CGI 设置,看看它们是否
    1. 删除ScriptAlias /bin/ /home/aj/public_html/
    2. 从部分中删除+ExecCGI选项<Directory /home/aj/public_html/>
    3. AddHandler mod_python .py<Directory /home/aj/public_html/>部分中删除
    4. PythonHandler mod_python.cgihandler<Directory /home/aj/public_html/>部分 中删除
  4. 确保/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>
    

  5. 不要忘记重新加载配置以使更改生效:

    $ 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 文档?

相关内容