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


25

Я пытаюсь настроить 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 restart
  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 restart
  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, Apache или Python?
Дана Нормальная

1
команде a2enmod не удалось найти mod_wsgi
AutomatedTester

Ответы:


6

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

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


5

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

apache2ctl -t -D DUMP_MODULES

это не похоже, что это загрузилось должным образом
AutomatedTester

4

Насколько я вижу, вы не загрузили модуль 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, и он должен работать.


2

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

dpkg -l libapache2-mod-wsgi

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

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


test.py был опечаткой в ​​вопросе. Я хотел поставить test.wsgi.
AutomatedTester

Хорошо, но вы подтвердили, что модуль установлен и правильно подключен в соответствии с инструкциями выше?
Зейн С Халсолл

Я поместил информацию, которую вы просили в вопросе.
AutomatedTester

Не вся информация - пожалуйста, проверьте вручную, если файлы wsgi.conf и wsgi.load в / etc / apache2 / mods-available / символически связаны с / etc / apache2 / mods-enabled согласно запросу. Достаточно простого длинного списка каталога (т.е. ls -alh / etc / apache2 / mods-enabled / ).
Зейн С Халсолл

1

Вы добавили строку 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.


test.py был опечаткой в ​​вопросе. Я хотел поставить test.wsgi. Я запустил a2enmod, но он сказал, что не может найти mod_wsgi, как я поставил в конце моего вопроса
AutomatedTester

1

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

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

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

HTTP: // локальный / WSGI /

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

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

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


0

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

apt-get install libapache2-mod-wsgi

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

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

Переустановка не заменяет отсутствующие файлы. Weird! Тем не менее, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.