Como explicar a instalação do Django / Python para Python-newbie executando um servidor IIS compartilhado [closed]

9

Por motivos fora do meu controle, nosso site é hospedado com um provedor de hospedagem que usa o IIS para seus servidores. Eles atualmente oferecem PHP e ASP, e também Python e Perl através de scripts cgi.

Eu quero fazer um re-design, reescrever do nosso site e querer mudar do PHP para uma configuração do Python / Django. O provedor de hospedagem está aberto para sugestões, mas está claro que "Nós realmente não sabemos o que é Python, ou como funciona, mas se você puder explicar para nós, tentaremos criar o que você precisa" .

No entanto, posso saber como configurar o Django em um ambiente de hospedagem compartilhada no apache / mod_python, mas não tenho ideia de como ele seria configurado no IIS e, certamente, não como ele seria configurado para uma hospedagem compartilhada meio Ambiente. Eu pesquisei um pouco, mas a maioria dos recursos que considero presumem que o sysadmin 1) conhece Python / Django e 2) está usando hospedagem dedicada do IIS para seu site.

Alguém poderia explicar como eu posso explicar o processo para o meu provedor de hospedagem, ou me dar dicas de recursos bons e detalhados que posso encaminhar para o meu provedor de hospedagem? Lembre-se de que as pessoas que executam o hosting podem saber "tudo" sobre o IIS, mas não sabem como lidar com o Python.

    
por Epcylon 17.05.2009 / 18:37

3 respostas

8

Se você está preso ao uso do IIS, use PyISAPIe em vez de CGI, se puder. Instruções e links para PyISAPIe estão abaixo. Seu host saberá muito mais sobre as extensões ISAPI se elas gerenciarem o IIS do que sobre Python, e não precisam saber muito sobre Python com o PyISAPIe.

MUITO MELHOR MANEIRA DE FAZER ISTO ESTÁ USANDO PyISAPIe, UMA EXTENSÃO ISAPI . O PyISAPIe é muito, muito mais rápido que o CGI no IIS7. O que isto faz é semelhante ao mod_python no Apache. A página inicial do projeto PyISAPIe tem instruções para configurar o Django com WSGI em PyISAPIe. Isso trará seu desempenho a velocidades razoáveis para um site público / de alto tráfego.

Configurar o Django em um ambiente IIS + Python via CGI será terrivelmente lento para qualquer uso de produção. Você nunca deve usá-lo para um site no qual espera atender mais de um punhado de solicitações por minuto. Ele também limita severamente o que você pode armazenar em cache na memória na estrutura de cache do Django, já que o processo do aplicativo Django é reiniciado a cada nova requisição.

Em um servidor da web como Apache, lighttpd, etc., com o mod_python, o interpretador Python executando o processo do Django permanece na memória e é inicializado com cada novo thread de trabalho do Apache que manipula muitas solicitações ao longo do tempo. Isso significa que o Python + Django não é encerrado e reiniciado para cada nova solicitação. Em uma configuração FastCGI, o servidor web (Apache ou lighttpd, por exemplo) cria um soquete (domínio UNIX ou TCP) através do qual ele se comunica com um aplicativo FastCGI (seu aplicativo web Django) sobre o protocolo FastCGI. Idem para configurações de proxy HTTP (eles falam HTTP em vez de FastCGI). Em um ambiente CGI, o interpretador Python é chamado de executar o aplicativo Django, completamente novo para cada solicitação, para que o aplicativo não consiga manter o estado entre as solicitações na memória e não possa armazená-lo corretamente em qualquer lugar, exceto em um banco de dados.

Suficiente ranting, se você precisar usar o IIS + CGI + Django, veja como realizar essa coisa horrível horrível: Use o seguinte código para criar seu próprio script CGI que executa seu aplicativo Django (ele traduz entre CGI e WSGI). Você terá que editar o script um pouco para que ele aponte para o seu aplicativo e código do Django. Esse é o script CGI para o qual você precisa passar solicitações. Em seguida, você precisa encaminhar / reescrever todos os pedidos para o seu script CGI ...

No IIS6, você precisará de um equivalente mod_rewrite como o IISRewrite, que eu acho que não é gratuito e é de código fechado. No IIS7, a Microsoft finalmente incluiu um módulo de reescrita de URL. A documentação para isso está localizada aqui . As instruções para criar regras de reescrita no IIS7 são aqui . Você desejará encaminhar tudo no URL base de destino a ser manipulado pelo seu script CGI.

por 30.05.2009 / 15:20
1

Como configurar o Python no FastCGI no IIS

Veja como configurar o Python no FastCGI O IIS 7+ abre o caminho para uma configuração decente do DJango

... e ser capaz de ligar um depurador ao processo, permitindo-lhe percorrer o seu código Python

Este exemplo não usa o console de gerenciamento do IIS, mas lista o conteúdo dos arquivos de configuração resultantes

Etapa 1

Instale o Python + um bom depurador (este exemplo usa o WingIDE que eu encontrei uma excelente ferramenta) Este exemplo assume a pasta c: \ python27

Etapa 2

Crie uma pasta web, por exemplo, em localhost c: \ inetpub \ wwwroot \ mypythonfolder e coloque o seguinte arquivo web.config:                       

Observe o | caractere de pipe na diretiva scriptProcessor. Isso é usado pelo IIS para mapear o script para um aplicativo fastCgi (etapa 3). Ele deve corresponder caractere por caractere ao caractere fullpath + pipe + configurações de argumentos da etapa 3 abaixo.

Etapa 3

No arquivo applicationHost.config na pasta c: \ windows \ system32 \ inetsrc \ config, coloque o seguinte no  seção:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

Etapa 4

Em c: \ python27 \ lib \ mylib \ myfcgi.py, coloque o seguinte código:

import wingdbstub

import os, io, sys ret="ambiente: \ r \ n" para param em os.environ.keys ():     ret = ret + "% s =% s \ r \ n"% (param, os.environ [param]) ret = ret + "\ r \ nArgs:" para arg em sys.argv:     ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Etapa 5

Certifique-se de que a IUSR tem direitos para escrever na sua pasta c: \ temp

Etapa 6

Coloque wingdbstub.py e wingdebugpw na sua pasta c: \ python27 \ lib \ mylib \. Isso permitirá a depuração no wingide. Esses arquivos são fornecidos com a instalação de sua asa. Observação: se o Python também precisar compilar seu código em wingstub.pyc, o IUSR precisará de direitos de gravação nessa pasta, pois o processo python será iniciado sob essa conta pelo IIS

Etapa 6

Abra o wingdb e defina um ponto de interrupção na linha 'import os, io, sys'

Etapa 7

Acerte no seu navegador link

Se tudo funcionar corretamente, o wingide agora deve ser acionado para exibir o código em execução no seu ponto de interrupção. Se não: - ou há um problema de firewall. O processo python se comunica com a interface WingIDE por meio de uma conexão tcp - ou há um problema com a segurança dentro do wingide. Ele precisa da versão apropriada do arquivo wingdebugpw, que basicamente contém uma senha ou token que valida o acesso em relação à instalação do wingide. Se este não fosse o caso, qualquer pessoa com acesso tcp ao seu PC poderia depurar o seu código.

Etapa 8

Verifique se em c: \ temp o arquivo de log foi criado. Isso também deve funcionar se você não conseguir fazer o passo 7

Etapa 9

Observe que esta página aciona o depurador, mas não retorna nenhuma página para o navegador. Alguns antecedentes: o servidor comunica o fastcgi através dos chamados 'registros'. Isso significa que cada solicitação de usuário é enviada ao seu aplicativo em vários 'registros' separados. Cada registro é uma estrutura de dados que indica o início de uma solicitação, a string de consulta, as variáveis de postagem, etc. A descompactação desses registros em uma única solicitação é um pouco trabalhosa, segue a especificação fastcgi de link

Como o conteúdo de c: \ python27 \ lib \ mylib \ myfcgi.py acabei de lançar uma cópia de zoofcgi.py fornecida pela helicontech. Este arquivo python é capaz de decodificar esses registros e servir uma página e é bastante interessante para depurar. Observe também que a helicontech fornece opcionalmente uma dll que fica entre o IIS e o zoofcgi.py, mas essa dll não é estritamente necessária. Eu acredito que ele implementa uma versão genérica e um pouco melhorada da implementação do fastcgi que a msft fornece. No entanto, quando você usa sua dll, quando você quer percorrer o seu código o processo é terminado bastante quicly e IIS / a DLL mata o seu processo python quando se conclui que nenhuma resposta está voltando dentro de um segundo ou 2.

É isso. Em princípio, a comunicação entre o IIS e seu código python é feita com pipes nomeados. Você deve ser capaz de configurá-lo usando sockets tcp mas eu não consegui descobrir qual porta é usada (eu acredito que o stdin deve ser transformado na porta que então pode ser select () ed mas eu não dei isso qualquer tentativa)

    
por 04.01.2012 / 13:16
0

Eu não tentei isso com o Python, mas funcionou muito bem como um CGI com Perl. Os produtos da ActiveState se integram perfeitamente ao IIS. Eu tive um grande sucesso com o ActivePerl. Eles também têm ActivePython que pode (provavelmente) também fazer o truque lá. Então eu acho que você faria o download do Django instalá-lo .

EDITAR: Ok, então risque a integração com o IIS ... NO ENTANTO, aqui está um artigo sobre como se integrar ao IIS . Você também pode considerar Iron Python como sua distro para uma caixa do Windows.

Para o provedor, duvido que eles precisem saber mais do que é uma plataforma de desenvolvimento web como o ASP / ASP.NET e que o Python é a linguagem usada para desenvolvê-lo.

No que diz respeito à instalação que mencionei acima, vou tentar isso e ver como se sai. Vou postar notas sobre isso se eu conseguir funcionar ok!

    
por 17.05.2009 / 19:32