Come configurare Mod_WSGI per Python su Ubuntu


25

Sto cercando di installare MOD_WSGI sulla mia casella Ubuntu. Ho trovato i passaggi che dicevano che dovevo fare i seguenti passi che ho trovato su 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 e aggiorna la directory
<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. Creato test.wsgi con

    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]
    

Il passaggio 2 fallisce perché dice che non è possibile trovare mod-wsgi anche se apt-get l'ha trovato. Se proseguo con i passaggi, l'app Python viene mostrata come testo normale in un browser.

Qualche idea su cosa ho fatto di sbagliato?


EDIT: risultati per le domande poste

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!

ULTERIORI MODIFICHE PER 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:~$ 

Cosa non riesce a trovare mod_wsgi, Apache o Python?
Dana the Sane,

1
il comando a2enmod non è riuscito a trovare mod_wsgi
AutomatedTester il

Risposte:



5

Verifica se il modulo è effettivamente caricato correttamente con:

apache2ctl -t -D DUMP_MODULES

non sembra che sia stato caricato correttamente
AutomatedTester

4

Per quanto posso vedere, non hai caricato il modulo mod_wsgi nel tuo httpd.conf.

Prima proverei ad aggiungere i file wsgi alla mods-enableddirectory di 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

Quindi riavviare Apache e dovrebbe funzionare.


2

Per prima cosa confermare che il modulo WSGI sia effettivamente installato:

dpkg -l libapache2-mod-wsgi

Questo dovrebbe darti un output compreso nome, versione, ecc. - cerca le lettere a sinistra del nome, questo indica lo stato corrente del pacchetto. Per controllare manualmente, guarda in / etc / apache2 / mods-available / e dovresti vedere sia wsgi.conf che wsgi.load . Se esistono, dovrebbero avere i corrispondenti collegamenti simbolici in / etc / apache2 / mods-enabled / .

Se uno dei due set non esiste, inizia prima risolvendolo: non puoi interpretare il codice python tramite apache se apache non riesce a trovare l'interprete. Inoltre, il tuo script test.py non funzionerà date le direttive AddHandler che hai configurato - quella direttiva dice ad Apache di passare i file di una certa estensione al gestore rilevante. Crea il tuo script test.wsgi o modifica la direttiva AddHandler .


il test.py era un refuso nella domanda. Intendevo mettere test.wsgi.
AutomatedTester

Bene, ma hai confermato che il modulo è installato e collegato correttamente secondo le istruzioni sopra?
Zayne S Halsall,

Ho inserito le informazioni richieste nella domanda.
AutomatedTester

Non tutte le informazioni - controlla manualmente se i file wsgi.conf e wsgi.load in / etc / apache2 / mods-available / sono simbolicamente collegati a / etc / apache2 / mods-enabled come richiesto. Dovrebbe essere sufficiente un lungo elenco della directory (ad esempio ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall,

1

Hai aggiunto la riga LoadModule per caricare effettivamente mod_wsgi? Qual è il messaggio di errore effettivo e da dove proviene? Vedere:

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

per istruzioni di basso livello. Dato che stai usando pacchetti binari puoi saltare la compilazione, ma devi comunque caricare mod_wsgi. Dove / come puoi farlo sarà determinato in una certa misura dalla tua distribuzione Linux. Sulla base di quella guida dovresti aver eseguito:

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

L'hai fatto davvero?


MODIFICARE

Rileggere la tua domanda è ovvio. Hai detto che i file con estensione .wsgi sono gestiti da mod_wsgi ma poi hai dato al file un'estensione .py. Utilizzare invece .wsgi.


il test.py era un refuso nella domanda. Intendevo mettere test.wsgi. Ho eseguito a2enmod ma ha detto che non riusciva a trovare mod_wsgi come ho messo alla fine della mia domanda
AutomatedTester

1

Prima puoi guardare la sintassi del tuo pitone. Controlla se hai davvero 4 spazi dopo la definizione della funzione. Controlla il file Python eseguendolo prima tramite terminale

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

quindi se non compaiono errori, eseguilo tramite browser web.

http: // localhost / WSGI /

e comunque, sembra che tu abbia perso qualcosa per il tuo file di configurazione / virtualhost di apache. Metti questo all'interno dei tag

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

a proposito, apt non ha problemi durante l'installazione del modulo wsgi. L'ho provato proprio ora e ho eseguito con successo uno script Python sul mio browser web.


0

Non sono sicuro se questo è rilevante, ma dopo aver eseguito:

apt-get install libapache2-mod-wsgi

... i seguenti file non esistevano:

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

La reinstallazione non sembra sostituire i file mancanti. Strano! Tuttavia, purgesembrava fare il trucco:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.