Comment configurer Mod_WSGI pour Python sur Ubuntu

25

J'essaie de configurer MOD_WSGI sur ma boîte Ubuntu. J'ai trouvé des étapes qui indiquaient que je devais effectuer les étapes suivantes que j'ai trouvées sur http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get install libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. redémarrage sudo /etc/init.d/apache2
  4. sudo gedit / etc / apache2 / sites-available / default et mettre à jour le répertoire
<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. redémarrage sudo /etc/init.d/apache2
  2. Créé test.wsgi avec

    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]
    

L'étape 2 échoue car il dit qu'il ne peut pas trouver mod-wsgi même si apt-get l'a trouvé. Si je continue les étapes, l'application python s'affiche simplement en texte brut dans un navigateur.

Des idées sur ce que j'ai mal fait?


EDIT: Résultats des questions posées

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!

PLUS DE MODIFICATION POUR 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
la source
Que ne peut pas trouver mod_wsgi, Apache ou Python?
Dana the Sane
1
la commande a2enmod n'a pas pu trouver mod_wsgi
AutomatedTester

Réponses:

5

Voyez si le module est réellement chargé correctement avec:

apache2ctl -t -D DUMP_MODULES
rmyates
la source
il ne semble pas avoir été chargé correctement
AutomatedTester
4

Pour autant que je sache, vous n'avez pas chargé le module mod_wsgi dans votre httpd.conf.

J'essaierais d'abord d'ajouter les fichiers wsgi au mods-enabledrépertoire d'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

Redémarrez ensuite Apache et cela devrait fonctionner.

Dan Loewenherz
la source
2

Vérifiez d'abord que le module WSGI est réellement installé:

dpkg -l libapache2-mod-wsgi

Cela devrait vous donner la sortie, y compris le nom, la version, etc. - recherchez les lettres à gauche du nom, cela indique l'état actuel du paquet. Pour vérifier manuellement, regardez dans / etc / apache2 / mods-available / et vous devriez voir à la fois wsgi.conf et wsgi.load . Si ceux-ci existent, ils devraient avoir des liens symboliques correspondants dans / etc / apache2 / mods-enabled / .

Si l'un des ensembles n'existe pas , commencez par le corriger en premier - vous ne pouvez pas interpréter le code python via apache si apache ne peut pas trouver l'interpréteur. De plus, votre script test.py ne fonctionnera pas étant donné le directives AddHandler que vous avez configurées - cette directive indique à apache de transmettre les fichiers d'une certaine extension au gestionnaire concerné. Faites votre script test.wsgi ou changez la directive AddHandler .

Zayne S Halsall
la source
le test.py était une faute de frappe dans la question. Je voulais mettre test.wsgi.
AutomatedTester
Très bien, mais avez-vous confirmé que le module est installé et correctement lié selon les instructions ci-dessus?
Zayne S Halsall
J'ai mis les informations que vous avez demandées dans la question.
AutomatedTester
Pas toutes les informations - veuillez vérifier manuellement si les fichiers wsgi.conf et wsgi.load dans / etc / apache2 / mods-available / sont symboliquement liés à / etc / apache2 / mods-enabled comme demandé. Une simple longue liste du répertoire devrait suffire (ie ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall
1

Avez-vous ajouté la ligne LoadModule pour provoquer le chargement de mod_wsgi? Quel est le message d'erreur réel et d'où vient-il? Voir:

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

pour les instructions de bas niveau. Puisque vous utilisez des packages binaires, vous pouvez ignorer la compilation, mais vous devez toujours provoquer le chargement de mod_wsgi. Où / comment vous pouvez faire cela va être déterminé dans une certaine mesure par votre distribution Linux. Sur la base de ce guide, vous êtes censé avoir exécuté:

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

L'avez-vous réellement fait?


MODIFIER

En relisant votre question, c'est évident. Vous avez dit que les fichiers avec l'extension .wsgi sont gérés par mod_wsgi mais vous avez ensuite donné au fichier une extension .py. Utilisez plutôt .wsgi.

Graham Dumpleton
la source
le test.py était une faute de frappe dans la question. Je voulais mettre test.wsgi. J'ai exécuté le a2enmod mais il a dit qu'il ne pouvait pas trouver mod_wsgi comme je l'ai dit à la fin de ma question
AutomatedTester
1

Vous pouvez d'abord regarder la syntaxe de votre python. Vérifiez si vous avez vraiment 4 espaces après la définition de la fonction. Vérifiez le fichier python en l'exécutant d'abord via le terminal

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

puis si aucune erreur n'apparaît, exécutez-le via un navigateur Web.

http: // localhost / wsgi /

et au fait, vous semblez avoir manqué quelque chose pour votre fichier de configuration / virtualhost apache. Mettez cela dans les balises

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

d'ailleurs, apt n'a aucun problème lors de l'installation du module wsgi. Je l'ai testé tout à l'heure et j'ai réussi à exécuter un script python sur mon navigateur Web.

YeahBoi
la source
0

Je ne sais pas si cela est pertinent, mais après l'exécution:

apt-get install libapache2-mod-wsgi

... les fichiers suivants n'existaient pas :

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

La réinstallation ne semble pas remplacer les fichiers manquants. Bizarre! Cependant, purgesemblait faire l'affaire:

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
la source