Iniciante, tentando configurar o Python [fechado]

2

Sou programador PHP, mas quero aprender Python. Estou um pouco confuso sobre como realmente executar um script. Eu criei o test.py na minha raiz do servidor web, no arquivo que eu escrevi:

#!/usr/bin/python
import jon.cgi as cgi
import jon.fcgi as fcgi

print "Content-type: text/html"
print "hello world"

Meu servidor está executando o Litespeed no CentOS 5, seguindo o tutorial em: link Eu instalei o CGI do Jon.

Mas quando eu navego para o script no meu navegador, ele imprime o código completo, como se não o estivesse analisando. Desculpe se eu estou fazendo uma pergunta estúpida, eu realmente aprecio qualquer ajuda, obrigado.

    
por amba88 10.05.2012 / 04:15

1 resposta

1

Uma resposta real precisa de muito mais informação (caminhos relevantes, pedaços de configuração, é o seu executável * .py, você reiniciou após a configuração etc), então eu vou fazer o melhor que puder, mas primeiro ...

Diferentemente do PHP que possui o fastCGI embutido no próprio interpretador, o Python não oculta a implementação do fastCGI. No nível básico, este test.py define cabeçalhos inválidos ( \r\n newlines são obrigatório ) e está faltando a linha em branco necessária entre os cabeçalhos e o corpo. Estas são as duas coisas que as funções req.set_header() e req.write() (como mostrado no exemplo) lidam.

Em segundo lugar, você tem que escrever um aplicativo fastCGI que execute "para sempre" (ou até que atinja o número máximo de solicitações e o servidor o mate para iniciar outro). Ao contrário do PHP, não há um "python-cgi" como o "php-cgi" (que eu saiba, de qualquer maneira ...) que será executado para sempre e manipulará pedidos executando pequenos trechos de código-fonte de vários arquivos.

Esse aplicativo terá uma função de manipulador de solicitação que é chamada para cada solicitação e é responsável pela leitura e pelo processamento da solicitação real. No caso do exemplo fornecido, a classe Handler (que é uma subclasse de cgi.Handler ) é criada e é usada para construir um servidor fastCGI cujo método run() é chamado para manipular a parte "executar para sempre" do questão. A classe tem um membro process() adicionado que aceita a solicitação e faz alguma coisa. Esse "algo" é onde você teria o seu código mundial de olá.

Com base na configuração do exemplo vinculado, quando um navegador acessar http://vhost.example.com/python/banana/apple.jpg , a litespeed tentará se conectar a um processo /absolutepathto/demoapp.py existente por meio do arquivo de soquete em /tmp/lshttpd/mypythonfcgi.sock (ou executar o programa demoapp.py então conecte se necessário). Uma vez conectado, ele usa o protocolo fastCGI para informar ao aplicativo em execução que ele tem uma solicitação para banana/apple.jpg via REQUEST_URI (eu penso). Pode ser /python/banana/apple.jpg ou algo assim. Use o exemplo dado para descarregar o pedido e ver). Cabe à função de membro process() descobrir o que fazer com a solicitação banana/apple.jpg . Ao contrário do PHP simples, os URLs não correspondem necessariamente a partes individuais do código-fonte. (Embora você possa escrever um programa python que use REQUEST_URI para executar outros programas python.)

Observe também que /absolutepathto/fastcgiapp.py está tradicionalmente fora da raiz do documento do seu servidor, para que as pessoas não possam baixar acidentalmente o aplicativo em si.

Agora , como por que seu script está sendo impresso, em vez de gerar um erro de cabeçalho incorreto, dando a você uma página em branco ou apenas travando. Os principais suspeitos são um dos três:

  1. o seu " /absolutepathto/test.py " não é executável (embora tenha certeza de que isso causaria um erro)
  2. seu virtualhost na litespeed não está configurado com seu test.py como um "Aplicativo externo" (isso também pode ser configurado no nível do servidor para todos os virtualhosts)
  3. seu URI nesse host virtual não está configurado para rotear solicitações para seu "Aplicativo externo" configurado na etapa 2.
  4. você não reiniciou a litespeed depois de alterar a configuração para # 2 e # 3? (não é realmente um suspeito principal, mas tem que perguntar)

Se não for o n.º 1 ou o n.º 4, atualize a questão com a sua configuração relevante da litespeed e iremos a partir daí.

    
por 10.05.2012 / 05:33

Tags