Як налаштувати Mod_WSGI для Python на Ubuntu


25

Я намагаюся налаштувати MOD_WSGI на своєму полі Ubuntu. Я знайшов кроки, які сказали, що мені потрібно зробити наступні кроки, знайдені на веб-сайті http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get install libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 перезапустити
  4. sudo gedit / тощо / apache2 / доступні сайти / за замовчуванням та оновити Каталог
<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 відображається як звичайний текст у браузері.

Будь-які ідеї, що я зробив неправильно?


EDIT: Результати запитань

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?
Dana Sane

1
Команда a2enmod не змогла знайти mod_wsgi
AutomatedTester

Відповіді:


6

Я виявив, що це відома помилка з пакетом apt-get mod_wsgi, якому більше року! Деталі на 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-enable / .

Якщо будь-який з наборів не існує, почніть з виправлення цього спочатку - ви не можете інтерпретувати код python через apache, якщо apache не може знайти інтерпретатора. Крім того, ваш скрипт test.py не працюватиме з урахуванням налаштованих вами директив AddHandler - ця директива повідомляє apache передавати файли певного розширення відповідному обробнику. Зробіть свій скрипт test.wsgi або змініть директиву AddHandler .


test.py був помилковим в питанні. Я мав намір поставити test.wsgi.
AutomatedTester

Чудово, але чи підтвердили ви, що модуль встановлений і правильно пов’язаний відповідно до наведених вище інструкцій?
Zayne S Halsall

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

Не вся інформація - будь ласка, перевірте вручну, чи файли wsgi.conf та wsgi.load в / etc / apache2 / mods-available / символічно пов'язані з / etc / apache2 / mods-включеними відповідно до запиту. Достатньо простого переліку каталогів (тобто ls -alh / etc / apache2 / mods-enable / ).
Zayne S Halsall

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

Ви насправді це робили?


EDIT

Читаючи ще раз своє запитання, це очевидно. Ви сказали, що файли з розширенням .wsgi обробляються mod_wsgi, але тоді ви надали файлу розширення .py. Використовуйте замість .wsgi.


test.py був помилковим в питанні. Я мав намір поставити test.wsgi. Я запустив a2enmod, але він сказав, що він не може знайти mod_wsgi, як я поставив наприкінці запитання
AutomatedTester

1

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

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

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

http: // localhost / 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

Перевірка, здається, не замінила відсутні файли. Дивно! Однак, 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.