Назад | Перейти на главную страницу

Установка Django на Ubuntu + Apache2 + mod_python

Это мой личный сервер разработки, который я недавно начал настраивать. Хотя 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 install libapache2-mod-python
    $ sudo a2enmod python
    $ sudo invoke-rc.d apache2 restart
    

  2. Поместите записи конфигурации вашего сайта в отдельный файл конфигурации виртуального хоста:

    $ cd /etc/apache2/sites-available
    $ sudo cp default 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. Не забудьте перезагрузить конфиги, чтобы изменения вступили в силу:

    $ sudo invoke-rc.d apache2 reload
    

Кроме того, как уже упоминалось в topdog, я бы предложил перейти к mod_wsgi или fcgi вместо mod_python, который считается устаревшим.

Изменить:

<Location "/home/aj/public_html/old/testing/">

кому:

<Location "/testing">

Это должен быть URL-адрес, по которому он смонтирован, а не физический каталог.

Вам также не хватает директивы PythonPath, поэтому Python знает, где найти ваш сайт Django.

URL-адрес, к которому вы затем получите доступ:http: // localhost / тестирование'. Замените localhost именем хоста, если это не поле, на котором вы запускаете браузер.

Вы читали документацию Django по развертыванию mod_wsgi на сайте Django?