web-dev-qa-db-fra.com

Comment configurer mod_wsgi pour Python sur ubuntu

J'essaie de configurer mod_wsgi sur ma boîte Ubuntu. J'ai trouvé des étapes qui disaient que je devais procéder à des étapes suivantes que j'ai trouvées à http://ubuntuforums.org/showthread.php?t=833766

  1. Sudo apt-get installer libapache2-mod-wsgi
  2. Sudo a2enmod mod-wsgi
  3. Sudo /etc/init.d/apache2 redémarrez
  4. Sudo gedit/etc/apache2/sites-disponibles/par défaut et mettez à 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. Sudo /etc/init.d/apache2 redémarrez
  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 est indiqué qu'il ne peut pas trouver mod-wsgi même si l'apt-get le trouva. Si je continue avec les étapes, le python App montre simplement en tant que texte brut dans un navigateur.

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


EDIT: Résultats pour les 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!

Autre édition 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:~$ 
25
AutomatedTester

J'ai constaté que ceci est un bug connu avec mod_wsgi apt-obtenir un package de plus d'un an! Détails à http://www.mail-archive.com/[email protected]/msg1147225.html . Le package APT-GET n'avait pas le fichier WSGI.load, de sorte que cela devait être créé en effectuant les étapes du lien ci-dessus.

Merci à tout le monde qui a aidé!

6
AutomatedTester

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

J'essaierais d'abord ajouter les fichiers WSGI au mods-enabled ré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

Puis redémarrez Apache et c'est devrait travail.

4
Dan Loewenherz

Confirmez d'abord que le module WSGI est en réalité installé:

dpkg -l libapache2-mod-wsgi

Cela devrait vous donner une sortie, y compris le nom, la version, etc. - recherchez les lettres à gauche du nom, cela indique l'état actuel de l'emballage. Pour vérifier manuellement, regardez-le /etc/apache2/mods-disponible/ et vous devriez voir les deux wsgi.conf et wsgi.load . Si celles-ci existent, ils doivent avoir des liens symboliques correspondants dans /etc/Apache2/Mods-compatibles/.

Devrait soit définir non existez, commencez par la correction qui ne peut pas d'abord interpréter python code via Apache si Apache ne trouve pas l'interprète. Aussi, votre test.py Le script ne fonctionnera pas compte tenu du addhandler Directives que vous avez configurées - Cette directive indique à Apache de passer des fichiers d'une certaine extension au gestionnaire concerné. Faites votre script Test.wsgi ou changer Le addhandler directive.

2
Zayne S Halsall

Avez-vous ajouté la ligne LoadModule pour faire charger 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 faible niveau. Puisque vous utilisez des packages binaires, vous pouvez ignorer la compilation, mais vous devez toujours faire charger MOD_WSGI. Où/comment vous pouvez faire cela va être déterminé à un degré de votre distribution Linux. Sur la base de ce guide, vous êtes censé avoir couru:

Sudo a2enmod mod-wsgi
Sudo /etc/init.d/Apache2 restart

Avez-vous fait cela?


ÉDITER

Lire votre question à nouveau c'est évident. Vous avez dit que les fichiers avec l'extension .WSGI sont traités par MOD_WSGI, mais vous avez ensuite donné au fichier une extension .PY. Utiliser .wsgi à la place.

1
Graham Dumpleton

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

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

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

http: // localhost/wsgi /

et au fait, vous semblez avoir manqué quelque chose pour votre fichier de configuration/virtualHost Apache. Mettre cela à l'intérieur des tags

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

au fait, APT n'a aucun problème lors de l'installation du module WSGI. Je l'ai testé juste maintenant et avez-vous exécuté avec succès A python script sur mon navigateur Web.

1
YeahBoi

Je ne sais pas si cela est pertinent, mais après avoir exécuté:

apt-get install libapache2-mod-wsgi

... Les fichiers suivants ont fait non existent:

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

La réinstallation ne semblait pas remplacer les fichiers manquants. Bizarre! Cependant, purge semblait faire à l'astuce:

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
0
Nick Bolton