Разверните django, используя apache, mod-wsgi - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь развернуть django, используя wsgi. Но это не работает. Не могли бы вы помочь мне? спасибо

django.wsgi.py

#!/usr/bin/python
import os, sys
sys.path.append('/home/me/project')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

/etc/apache2/sites-available/default

    <VirtualHost *:80>

  ServerName www.me.org
  ServerAlias *me.org

  Alias /admin_media /usr/lib/python2.4/site-packages/django/contrib/admin/media

  <Location /admin_media>
    Order allow,deny
    Allow from all
  </Location>

  Alias /media /var/www/media/

  <Location /media>
    Order allow,deny
    Allow from all
  </Location>

  WSGIScriptAlias / /home/me/project/apache/django.wsgi

  WSGIDaemonProcess me processes=2 maximum-requests=500 threads=1
  WSGIProcessGroup me

</VirtualHost>

Error Message

   /etc/init.d/apache2 restart
Syntax error on line 3 of /etc/apache2/sites-enabled/me:
Invalid command 'PythonHandler', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
   ...fail!

ОБНОВЛЕНИЕ: Странно /etc/apache2/sites-enable/me

<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonDebug On
PythonPath "['/home/me2'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE me.settings

Можно ли отключить мод-питон?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

Должно быть очевидно, что ваше сообщение об ошибке исходит из файла, отличного от того, который вы показали здесь - me вместо default. Этот файл, очевидно, имеет ссылку на PythonHandler, которая является директивой, принадлежащей mod_python, которую вы, похоже, не установили (и не должны, поскольку она устарела).

Когда вы исправите эту ошибку - скорее всего, полностью удалив этот файл - у вас будет еще одна, которую нужно исправить в файле wsgi - вы добавили путь project в путь pythonpath, но затем обратились к нему ваши настройки как project.settings, поэтому он не будет найден. Либо добавьте вместо этого родительский путь, либо укажите параметры как просто settings.

1 голос
/ 02 декабря 2011

Файл /etc/apache2/sites-enable/me предназначен для modpython.

Вы используете mod_wsgi.

Таким образом. Удалите /etc/apache2/sites-enable/me и следуйте документации, представленной здесь

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/

1 голос
/ 02 декабря 2011

Я не эксперт в этом деле, но здесь я сравниваю с тем, что у меня работает.Я использую mod_wsgi вместо mod_python.То, что у вас есть в "/ etc / apache2 / sites-enabled / me", кажется, я указал в моем файле "django.wsgi.py", и у меня нет таких файлов в sites-enabled.

Комуваш django.wsgi.py вам может понадобиться добавить путь к вашим внешним библиотекам, и когда я устанавливаю путь для своего проекта, мой файл настроек - /var/myproject/src/myapp/settings.py, и я задаю путьв '/ var / myproject / src' и модуль django_settings_module в myapp.settings.Вот как выглядит мой файл myproject.wsgi:

#!/usr/bin/python
import os
import sys
sys.path.append('')
sys.path.append('/usr/local/lib/python2.7/site-packages')
sys.path.append('/usr/local/lib/python2.7/site-packages/Django-1.3-py2.7.egg')
... other external libs ..
sys.path.append('/var/myproject/myapp/src')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Вот что у меня есть для моего wsgi.conf:

<VirtualHost *:80>
    ServerAdmin me@me.com
    DocumentRoot "/var/myproject/"
    ServerName localhost
    ErrorLog "/var/myproject/logs/apache-error.log"
    CustomLog "/var/myproject/logs/apache-access.log" common

    Options ExecCGI FollowSymLinks MultiViews

    AddHandler wsgi-script .wsgi
    WSGIDaemonProcess asgportal
    WSGIProcessGroup asgportal

    Alias /static /var/myproject/media/static
    WSGIScriptAlias / /var/myproject/myproject.wsgi  # my django.wsgi.py file

    DirectoryIndex index.html index.cgi

    AddHandler cgi-script .cgi .pl
</VirtualHost>
...