Cómo configurar Mod_WSGI para Python en Ubuntu


25

Estoy tratando de configurar MOD_WSGI en mi cuadro de Ubuntu. Encontré pasos que decían que tenía que hacer los siguientes pasos que encontré en 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 y actualice el directorio
<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. Creado 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]
    

El paso 2 falla porque dice que no puede encontrar mod-wsgi a pesar de que apt-get lo encontró. Si sigo con los pasos, la aplicación Python solo se muestra como texto sin formato en un navegador.

¿Alguna idea de lo que he hecho mal?


EDITAR: resultados de las preguntas formuladas

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!

MÁS EDICIONES PARA 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:~$ 

¿Qué no puede encontrar mod_wsgi, Apache o Python?
Dana the Sane

1
el comando a2enmod no pudo encontrar mod_wsgi
AutomatedTester

Respuestas:



5

Vea si el módulo está realmente cargado correctamente con:

apache2ctl -t -D DUMP_MODULES

que no parezca que se ha cargado correctamente
AutomatedTester

4

Por lo que puedo ver, no has cargado el módulo mod_wsgi en tu httpd.conf.

Primero intentaría agregar los archivos wsgi al mods-enableddirectorio de 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

Luego reinicie Apache y debería funcionar.


2

Primero confirme que el módulo WSGI está realmente instalado:

dpkg -l libapache2-mod-wsgi

Esto debería proporcionarle resultados, incluidos el nombre, la versión, etc. Busque las letras a la izquierda del nombre, esto indica el estado actual del paquete. Para verificar manualmente, busque en / etc / apache2 / mods-available / y debería ver tanto wsgi.conf como wsgi.load . Si existen, deberían tener enlaces simbólicos correspondientes en / etc / apache2 / mods-enabled / .

Si el conjunto no existe, comience por corregirlo primero: no puede interpretar el código de Python a través de apache si apache no puede encontrar el intérprete. Además, su script test.py no funcionará dadas las directivas AddHandler que haya configurado; esa directiva le dice a apache que pase archivos de cierta extensión al controlador correspondiente. Haga su script test.wsgi o cambie la directiva AddHandler .


test.py fue un error tipográfico en la pregunta. Quise poner test.wsgi.
AutomatedTester

Bien, pero ¿ha confirmado que el módulo está instalado y correctamente conectado según las instrucciones anteriores?
Zayne S Halsall

He puesto la información que solicitó en la pregunta.
AutomatedTester

No toda la información: compruebe manualmente si los archivos wsgi.conf y wsgi.load en / etc / apache2 / mods-available / están simbólicamente vinculados a / etc / apache2 / mods-enabled según lo solicitado. Una simple lista larga del directorio debería ser suficiente (es decir, ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall

1

¿Agregó la línea LoadModule para que realmente se cargue mod_wsgi? ¿Cuál es el mensaje de error real y de dónde viene? Ver:

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

para instrucciones de bajo nivel. Como está utilizando paquetes binarios, puede omitir la compilación, pero aún debe hacer que se cargue mod_wsgi. Dónde / cómo puede hacer esto estará determinado en cierta medida por su distribución de Linux. Según esa guía, debe correr:

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

¿Realmente hiciste eso?


EDITAR

Leer su pregunta nuevamente es obvio. Dijiste que mod_wsgi maneja los archivos con extensión .wsgi, pero luego le diste al archivo una extensión .py. Utilice .wsgi en su lugar.


test.py fue un error tipográfico en la pregunta. Quise poner test.wsgi. Ejecuté el a2enmod pero decía que no podía encontrar mod_wsgi como puse al final de mi pregunta
AutomatedTester

1

Puede mirar primero la sintaxis de su python. Compruebe si realmente tiene 4 espacios después de la definición de la función. Verifique el archivo de Python ejecutándolo primero a través de la terminal

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

entonces, si no aparecen errores, ejecútelo a través del navegador web.

http: // localhost / wsgi /

y por cierto, parece que te has perdido algo para tu configuración de apache / archivo virtualhost. Pon esto dentro de las etiquetas

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

Por cierto, apt no tiene problemas al instalar el módulo wsgi. Lo probé hace un momento y ejecuté con éxito un script de Python en mi navegador web.


0

No estoy seguro si esto es relevante, pero después de ejecutar:

apt-get install libapache2-mod-wsgi

... los siguientes archivos no existían:

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

La reinstalación no pareció reemplazar los archivos faltantes. ¡Extraño! Sin embargo, purgeparecía hacer el truco:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.