Jak skonfigurować Mod_WSGI dla Pythona na Ubuntu

25

Próbuję skonfigurować MOD_WSGI na moim polu Ubuntu. Znalazłem kroki, które powiedziałem, że muszę wykonać następujące kroki, które znalazłem na 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 restart
  4. sudo gedit / etc / apache2 / sites-available / default i zaktualizuj katalog
<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. Utworzono test.wsgi z

    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]
    

Krok 2 kończy się niepowodzeniem, ponieważ mówi, że nie może znaleźć mod-wsgi, nawet jeśli apt-get go znalazł. Jeśli wykonam kolejne kroki, aplikacja python pokazuje się jako zwykły tekst w przeglądarce.

Jakieś pomysły, co zrobiłem źle?


EDYCJA: Wyniki dla zadanych pytań

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 <[email protected]>
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 <[email protected]>
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!

DALSZA EDYCJA DLA 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:~$ 
AutomatedTester
źródło
Czego nie można znaleźć mod_wsgi, Apache lub Python?
Dana the Sane,
1
komenda a2enmod nie mogła znaleźć mod_wsgi
AutomatedTester

Odpowiedzi:

5

Sprawdź, czy moduł jest poprawnie załadowany:

apache2ctl -t -D DUMP_MODULES
Rmyates
źródło
wygląda na to, że nie został poprawnie załadowany
AutomatedTester
4

O ile widzę, nie załadowałeś modułu mod_wsgi do swojego httpd.conf.

Najpierw spróbuję dodać pliki wsgi do mods-enabledkatalogu 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

Następnie uruchom ponownie Apache i powinno działać.

Dan Loewenherz
źródło
2

Najpierw potwierdź, że moduł WSGI jest rzeczywiście zainstalowany:

dpkg -l libapache2-mod-wsgi

To powinno dać ci dane wyjściowe, w tym nazwę, wersję itp. - poszukaj liter po lewej stronie nazwy, co oznacza bieżący status paczki. Aby to sprawdzić ręcznie, zajrzyj do / etc / apache2 / mods-available / i powinieneś zobaczyć zarówno wsgi.conf, jak i wsgi.load . Jeśli takie istnieją, powinny mieć odpowiednie dowiązania symboliczne w / etc / apache2 / mods-enabled / .

Jeśli któryś z tych zestawów nie istnieje, zacznij od poprawienia tego w pierwszej kolejności - nie możesz interpretować kodu Pythona przez apache, jeśli apache nie może znaleźć interpretera. Ponadto skrypt test.py nie będzie działał, biorąc pod uwagę skonfigurowane dyrektywy AddHandler - ta dyrektywa nakazuje apache przekazać pliki o określonym rozszerzeniu do odpowiedniego modułu obsługi. Utwórz skrypt test.wsgi lub zmień dyrektywę AddHandler .

Zayne S. Halsall
źródło
test.py był literówką w pytaniu. Chciałem umieścić test.wsgi.
AutomatedTester,
W porządku, ale czy potwierdziłeś, że moduł jest zainstalowany i poprawnie podłączony zgodnie z powyższymi instrukcjami?
Zayne S Halsall,
W pytaniu umieściłem informacje, o które prosiłeś.
AutomatedTester,
Nie wszystkie informacje - sprawdź ręcznie, czy pliki wsgi.conf i wsgi.load w / etc / apache2 / mods-available / są symbolicznie połączone z / etc / apache2 / mods-enable zgodnie z żądaniem. Wystarczy prosta długa lista katalogów (tj. Ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall,
1

Czy dodałeś wiersz LoadModule, aby faktycznie załadować mod_wsgi? Jaki jest rzeczywisty komunikat o błędzie i skąd pochodzi? Widzieć:

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

dla instrukcji niskiego poziomu. Ponieważ używasz pakietów binarnych, możesz pominąć kompilację, ale nadal musisz spowodować załadowanie mod_wsgi. Gdzie / jak możesz to zrobić, do pewnego stopnia zależy twoja dystrybucja Linuksa. Na podstawie tego przewodnika, który masz uruchomić:

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

Zrobiłeś to?


EDYTOWAĆ

Ponowne czytanie pytania jest oczywiste. Powiedziałeś, że pliki z rozszerzeniem .wsgi są obsługiwane przez mod_wsgi, ale potem nadałeś temu plikowi rozszerzenie .py. Zamiast tego użyj .wsgi.

Graham Dumpleton
źródło
test.py był literówką w pytaniu. Chciałem umieścić test.wsgi. Uruchomiłem a2enmod, ale powiedziało, że nie może znaleźć mod_wsgi, jak postawiłem na końcu mojego pytania
AutomatedTester
1

Najpierw możesz spojrzeć na składnię swojego pytona. Sprawdź, czy naprawdę masz 4 spacje po definicji funkcji. Sprawdź plik python, uruchamiając go najpierw za pomocą terminala

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

następnie jeśli nie pojawią się żadne błędy, uruchom go za pomocą przeglądarki internetowej.

http: // localhost / wsgi /

a tak na marginesie, wydaje się, że coś przeoczyłeś w pliku konfiguracji apache / virtualhost. Umieść to w tagach

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

przy okazji, apt nie ma problemów z instalacją modułu wsgi. Właśnie go przetestowałem i pomyślnie uruchomiłem skrypt Pythona w mojej przeglądarce internetowej.

YeahBoi
źródło
0

Nie jestem pewien, czy jest to istotne, ale po uruchomieniu:

apt-get install libapache2-mod-wsgi

... następujące pliki nie istniały:

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

Ponowna instalacja nie zastępuje brakujących plików. Dziwne! purgeWydawało się jednak, że należy to zrobić:

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
Nick Bolton
źródło