Como configurar o Mod_WSGI para Python no Ubuntu


25

Estou tentando configurar o MOD_WSGI na minha caixa do Ubuntu. Encontrei etapas que diziam que precisava executar as seguintes etapas encontradas em 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 atualize o diretório
<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. Criado test.wsgi com

    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]
    

O passo 2 falha porque diz que não é possível encontrar o mod-wsgi mesmo que o apt-get o tenha encontrado. Se eu continuar com as etapas, o aplicativo python será exibido como texto sem formatação em um navegador.

Alguma idéia do que eu fiz de errado?


EDIT: Resultados para as perguntas feitas

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!

EDIÇÃO ADICIONAL 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:~$ 

O que não é possível encontrar mod_wsgi, Apache ou Python?
Dana the Sane

11
o comando a2enmod não pôde encontrar mod_wsgi
AutomatedTester

Respostas:



5

Veja se o módulo está realmente carregado corretamente com:

apache2ctl -t -D DUMP_MODULES

ele não se parece com ele foi carregado corretamente
AutomatedTester

4

Até onde eu sei, você não carregou o módulo mod_wsgi no seu httpd.conf.

Eu tentaria primeiro adicionar os arquivos wsgi ao mods-enableddiretório do 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

Em seguida, reinicie o Apache e ele deve funcionar.


2

Primeiro confirme se o módulo WSGI está realmente instalado:

dpkg -l libapache2-mod-wsgi

Isso deve fornecer uma saída, incluindo nome, versão etc. - procure as letras à esquerda do nome, isso indica o status atual do pacote. Para verificar manualmente, consulte / etc / apache2 / mods-available / e você verá wsgi.conf e wsgi.load . Se existirem, eles devem ter links simbólicos correspondentes em / etc / apache2 / mods-enabled / .

Caso um dos conjuntos não exista, comece corrigindo isso primeiro - você não pode interpretar o código python via apache se o apache não conseguir encontrar o intérprete. Além disso, seu script test.py não funcionará, considerando as diretivas AddHandler que você configurou - essa diretiva diz ao apache para passar arquivos de uma certa extensão para o manipulador relevante. Faça seu script test.wsgi ou altere a diretiva AddHandler .


o test.py foi um erro de digitação na pergunta. Eu pretendia colocar test.wsgi.
AutomatedTester

Tudo bem, mas você confirmou que o módulo está instalado e corretamente vinculado de acordo com as instruções acima?
Zayne S Halsall

Eu coloquei as informações que você pediu na pergunta.
AutomatedTester

Nem todas as informações - verifique manualmente se os arquivos wsgi.conf e wsgi.load em / etc / apache2 / mods-available / estão simbolicamente vinculados a / etc / apache2 / mods-enabled conforme solicitado. Uma lista simples e longa do diretório deve ser suficiente (por exemplo, ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall

1

Você adicionou a linha LoadModule para realmente fazer com que o mod_wsgi seja carregado? Qual é a mensagem de erro real e de onde ela vem? Vejo:

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

para instruções de baixo nível. Como você está usando pacotes binários, você pode pular a compilação, mas ainda precisa fazer com que o mod_wsgi seja carregado. Onde / como você pode fazer isso será determinado até certo ponto pela sua distribuição Linux. Com base nesse guia, você deve executar:

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

Você realmente fez isso?


EDITAR

Lendo sua pergunta novamente, é óbvio. Você disse que os arquivos com extensão .wsgi são manipulados por mod_wsgi, mas depois deu uma extensão .py ao arquivo. Use .wsgi em vez disso.


o test.py foi um erro de digitação na pergunta. Eu pretendia colocar test.wsgi. I foi executada a a2enmod mas disse que não poderia encontrar mod_wsgi como eu colocar no final da minha pergunta
AutomatedTester

1

Você pode observar primeiro a sintaxe do seu python. Verifique se você realmente tem 4 espaços após a definição da função. Verifique o arquivo python executando-o primeiro via terminal

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

se nenhum erro aparecer, execute-o pelo navegador da web.

http: // localhost / wsgi /

e, a propósito, você parece ter perdido algo no seu arquivo de configuração / virtualhost do apache. Coloque isso dentro das tags

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

a propósito, o apt não tem problemas ao instalar o módulo wsgi. Eu testei agora e executei com êxito um script python no meu navegador.


0

Não tenho certeza se isso é relevante, mas após a execução:

apt-get install libapache2-mod-wsgi

... os seguintes arquivos não existiam:

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

A reinstalação não pareceu substituir os arquivos ausentes. Esquisito! No entanto, purgeparecia fazer o truque:

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.