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

Как настроить Mod_WSGI для Python в Ubuntu

Я пытаюсь установить MOD_WSGI на своем компьютере с Ubuntu. Я нашел шаги, в которых говорилось, что мне нужно сделать следующие шаги, которые я нашел на http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get установить libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 перезапуск
  4. sudo gedit / etc / apache2 / sites-available / default и обновите каталог
<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews ExecCGI

  AddHandler cgi-script .cgi
  AddHandler wsgi-script .wsgi

  AllowOverride None
  Order allow,deny
  allow from all
</Directory>
  1. sudo /etc/init.d/apache2 перезапуск
  2. Создан test.wsgi с

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'    
        response_headers = [('Content-type', 'text/plain'),
                            ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]
    

Шаг 2 терпит неудачу, потому что он говорит, что не может найти mod-wsgi, даже если apt-get его нашел. Если я продолжу выполнять эти шаги, приложение Python будет отображаться в браузере как обычный текст.

Есть идеи, что я сделал неправильно?


РЕДАКТИРОВАТЬ: результаты по заданным вопросам

automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                   Version                                Description
+++-======================================-======================================-============================================================================================
ii  libapache2-mod-wsgi                    2.5-1                                  Python WSGI adapter module for Apache
automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi
Package: libapache2-mod-wsgi
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 376
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Architecture: i386
Source: mod-wsgi
Version: 2.5-1
Depends: apache2, apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7)
Suggests: apache2-mpm-worker | apache2-mpm-event
Conffiles:
 /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6
 /etc/apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c
Description: Python WSGI adapter module for Apache
 The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server
 Gateway Interface, a standard interface between web server software and
 web applications written in Python) compliant interface for hosting Python
 based web applications within Apache. The adapter provides significantly
 better performance than using existing WSGI adapters for mod_python or CGI.
Original-Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
Homepage: http://www.modwsgi.org/
automatedtester@ubuntu:~$ sudo a2enmod libapache2-mod-wsgi
ERROR: Module libapache2-mod-wsgi does not exist!
automatedtester@ubuntu:~$ sudo a2enmod mod-wsgi
ERROR: Module mod-wsgi does not exist!

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ ДЛЯ RMYates

automatedtester@ubuntu:~$ apache2ctl -t -D DUMP_MODULES
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_worker_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgid_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 python_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK
automatedtester@ubuntu:~$ 

Я обнаружил, что это известная ошибка с пакетом mod_wsgi apt-get, которому больше года! Подробности на http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg1147225.html. В пакете apt-get не было файла wsgi.load, поэтому его нужно было создать, выполнив действия, указанные в приведенной выше ссылке.

Спасибо всем, кто помог!

Посмотрите, действительно ли модуль загружен правильно:

apache2ctl -t -D DUMP_MODULES

Насколько я понимаю, вы не загрузили модуль mod_wsgi в свой httpd.conf.

Сначала я попробую добавить файлы wsgi в mods-enabled каталог Apache.

sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled

Затем перезапустите Apache и должен работай.

Сначала убедитесь, что модуль WSGI фактически установлены:

dpkg -l libapache2-mod-wsgi

Это должно дать вам вывод, включая имя, версию и т. Д. - ищите буквы слева от имени, это указывает на текущий статус пакета. Чтобы проверить вручную, загляните в / и т.д. / apache2 / доступные моды / и вы должны увидеть оба wsgi.conf и wsgi.load. Если они существуют, они должны иметь соответствующие символические ссылки в / и т.д. / apache2 / с поддержкой модов /.

Следует либо установить не существуют, начните с исправления этого в первую очередь - вы не можете интерпретировать код Python через apache, если apache не может найти интерпретатор. Кроме того, ваш test.py сценарий не будет работать с учетом AddHandler настроенные вами директивы - эта директива указывает apache передавать файлы определенного расширение соответствующему обработчику. Сделайте свой сценарий test.wsgi или измените AddHandler директива.

Вы добавили строку LoadModule для фактической загрузки mod_wsgi? Какое собственное сообщение об ошибке и откуда оно взялось? Видеть:

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

для инструкций низкого уровня. Поскольку вы используете бинарные пакеты, вы можете пропустить компиляцию, но вам все равно нужно вызвать загрузку mod_wsgi. Где и как вы можете это сделать, в определенной степени будет определять ваш дистрибутив Linux. Основываясь на этом руководстве, вы должны выполнить:

sudo a2enmod mod-wsgi
sudo /etc/init.d/apache2 restart

Вы действительно это сделали?


РЕДАКТИРОВАТЬ

Прочитав ваш вопрос еще раз, это очевидно. Вы сказали, что файлы с расширением .wsgi обрабатываются mod_wsgi, но затем вы дали файлу расширение .py. Вместо этого используйте .wsgi.

Вы можете сначала взглянуть на синтаксис вашего Python. Проверьте, действительно ли у вас есть 4 пробела после определения функции. Проверьте файл python, запустив его сначала через терминал

$ python /var/www/py/wsgi_handler.wsgi

затем, если ошибок не появилось, запустите его через веб-браузер.

http: // локальный / wsgi /

и, кстати, вы, кажется, что-то пропустили для своего файла конфигурации / виртуального хоста apache. Поместите это в теги

WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py

кстати, у apt нет проблем при установке модуля wsgi. Я только что протестировал его и успешно запустил скрипт Python в своем браузере.

Не уверен, актуально ли это, но после запуска:

apt-get install libapache2-mod-wsgi

... следующие файлы сделали не существует:

/etc/apache2/mods-available/wsgi.conf
/etc/apache2/mods-available/wsgi.load

Переустановка, похоже, не заменила отсутствующие файлы. Странно! Тем не мение, purge казалось, дело в шляпе:

apt-get install libapache2-mod-wsgi
apt-get purge libapache2-mod-wsgi
apt-get install libapache2-mod-wsgi

# ls /etc/apache2/mods-available/ | grep wsgi
wsgi.conf
wsgi.load