mod_fcgid + Python + Apache 2.2 / RHEL 5: saída para error_log, não navegador

1

Eu estou tentando fazer um setup do Django + mod_fcgid funcionando (o mod_wsgi é complicado, já que eu tenho um link estaticamente Python, não pergunte. Embora isso tenha sido trivial na minha caixa de desenvolvimento do Mac OS X, a execução do mesmo no servidor, até agora, provou ser impossível.

Com esta configuração

LoadModule fcgid_module modules/mod_fcgid.so

FCGIDSocketPath run/mod_fcgid
FCGIDSharememPath run/mod_fcgid/fcgid_shm

ScriptAliasMatch  /apps/([^/]+)(/.*)? /var/www/apps/$1/apache/dispatch.fcgi$2

<DirectoryMatch ^/var/www/apps/([^/]+)/apache>
  SetHandler fcgid-script
  Order allow,deny
  Allow from all
  Options +ExecCGI
</DirectoryMatch>

e este exemplo dispatch.fcgi :

#!/usr/bin/python
import sys

sys.path.insert(0, '/var/www/lib/python2.5/site-packages/flup-1.0.2.egg')

def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['This is my hello world test!\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()

Navegar para a minha página de teste gera um erro 500 e, nos meus logs de erro do Apache, recebo:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI!
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI!
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI!
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI!
Status: 200 OK
Content-Type: text/plain
Content-Length: 29

This is my hello world test!
[Wed Sep 30 11:09:18 2009] [notice] mod_fcgid: process /var/www/apps/test/apache/dispatch.fcgi(31043) exit(server exited), terminated by calling exit(), return code: 0

A minha saída está ótima, exceto no log de erros do Apache, não na janela do meu navegador.

Quando eu removo minha diretiva SetHandler , a saída vai para a direita onde eu quero; obviamente, ele está sendo executado no modo CGI comum. Isso não é de alto desempenho o suficiente para o meu aplicativo Django, que recebe 1-2 tempos de carregamento de segunda página nessa configuração.

Até agora, tentei:

  • flup 1.0.2, versão de desenvolvimento do flup 1.0.3 e um fcgi.py aleatório escrito pelo autor do flup
  • versões encadeadas e prefork do meu servidor FastCGI
  • Uma versão RPM do mod_fcgid e da versão SVN do Apache
  • Python 2.4 e Python 2.5 (py2.4 não é uma opção de implantação realista, mas para testes ...)
  • AliasMatch / ScriptAliasMatch / mod_rewrite

Nada parece fazer qualquer diferença, exceto que usar o AliasMatch me mostra a origem, que é como eu esperava.

Mais uma vez, isso foi absolutamente trivial no Mac OS X. Ele simplesmente funciona com uma configuração comparável.

Além de obter um Python melhor e usar o mod_wsgi (o que é possível, se for um problema), como faço para que ele funcione?

    
por Nate 29.10.2010 / 18:38

1 resposta

1

O problema: alguma política do SELinux. Eu não sou especialista o suficiente para diagnosticar, mas fazendo:

/usr/sbin/setenforce 0

faz tudo funcionar como um encanto.

    
por 01.10.2009 / 22:25