wake-up-neo.net

Cómo explicar la instalación de Django / Python a Python-Newbie en ejecución compartida IIS Server

Por razones más allá de mi control, nuestro sitio web está alojado con un proveedor de alojamiento que utiliza IIS para sus servidores. Actualmente ofrecen PHP y ASP, y también Python y perl a través de CGI-Scripts.

Quiero hacer un re-diseño, reescritura de nuestro sitio web y desea cambiar de PHP a una configuración de Python/Django. El proveedor de alojamiento está abierto para sugerencias, pero está claro que "realmente no sabemos qué Python está, o cómo funciona, pero si puede explicárnoslo, intentaremos establecerlo. Con lo que necesites ".

Sin embargo, podría saber cómo configurar Django en un entorno de alojamiento compartido en Apache/Mod_Python, pero no tengo ni idea de cómo se configuraría en IIS, y ciertamente no como se configuraría para un entorno de alojamiento compartido. Me he registrado un poco, pero la mayoría de los recursos que encuentro asumen que el SYSADMIN 1) conoce Python/Django y 2) está usando IIS Hosting para su sitio.

¿Podría alguien explicar cómo puedo explicar el proceso a mi proveedor de alojamiento, o darme punteros a los buenos recursos detallados que pueda reenviar a mi proveedor de alojamiento? Tenga en cuenta que las personas que dirigen el alojamiento pueden conocer "todo" sobre IIS, pero no tienen idea de cómo tratar con Python.

9
Epcylon

Si está atrapado con el uso de IIS, use Pyisapie en lugar de CGI si puede. Las instrucciones y los enlaces para Pyisapie están a continuación. Su host web sabrá mucho más sobre las extensiones de ISAPI si administran IIS que sobre Python, y no necesitan saber mucho sobre Python con Pyisapie .

Una forma mucho mejor de hacer esto IS usando Pyisapie, una extensión ISAPI . Pyisapie es mucho, mucho más rápido que CGI en IIS7. Lo que hace esto es similar a MOD_PYTHON en Apache. La página de inicio del proyecto Pyisapie tiene instrucciones para configurar Django con WSGI sobre Pyisapie. Esto llevará su rendimiento a velocidades razonables para un público/Sitio web de alto tráfico.

Configuración Django En un entorno IIS + Python a través de CGI será horriblemente lento para cualquier uso de producción. Nunca debe usar esto para un sitio web en el que espera que usted espera atender más de un puñado de Solicitudes por minuto. También le limita severamente en lo que puede almacenar en caché en la memoria en el marco de almacenamiento en caché de Django, ya que el Django se reinicia con cada nueva solicitud.

En un servidor web sano como Apache, Lighttpd, etc., con Mod_Python, el Python ejecutando el Django, el proceso permanece en la memoria y se inicializa con cada nuevo Hilo de trabajador Apache que maneja muchas solicitudes a lo largo del tiempo. Esto significa que Python + Django no se sale y se reinicia para cada nueva solicitud. En un FastCGI Configuración, el servidor web (Apache o Lighttpd, por ejemplo,) crea un zócalo (dominio UNIX o TCP) a través de los cuales se comunica con una aplicación FASTCGI (su =Django) sobre el protocolo FASTCGI. DITTO Para configuraciones de proxy HTTP (hablan HTTP en lugar de FastCGI). En un entorno CGI, el Python que ejecuta la Django, completamente para Cada solicitud, por lo que la aplicación no puede mantener el estado a través de las solicitudes en la memoria y no puede almacenar caché correctamente en cualquier lugar, sino en una base de datos.

suficiente Ranting, si debe usar IIS + CGI + DJANGO, aquí le indicamos cómo lograr esta cosa horrible horrible: Uso el siguiente código = Para crear su propio script de CGI que ejecuta su Django (se traduce entre CGI y WSGI). Tendrá que editar el script un poco para que apunte a su Django Aplicación y código. Ese es el script CGI con el que necesitaría pasar las solicitudes a. A continuación, debe reenviar/reescribir todas las solicitudes a su script de CGI ...

Bajo IIS6, necesitará un equivalente MOD_REWRITE, como IISREWRITE, lo que creo que no es gratuito y es una fuente cerrada. Bajo IIS7, Microsoft finalmente incluía un módulo de reescritura de URL. Documentación para ello se encuentra aquí . Las instrucciones para crear reglas de reescritura en IIS7 están aquí . Querrá reenviar todo en la URL base de destino para ser manejada por su script de CGI.

8
user6281

Cómo configurar Python en FastCGI en IIS

Aquí es cómo configurar Python en Fastcgi IIS 7+ con se abre el camino por un decente Django Configuración

... y poder conectar un depurador en el proceso que le permita pasar a través de su Python Code

Este ejemplo no usa la IIS Management Console, pero enumera los contenidos de los archivos de configuración resultantes

Paso 1

Instalar Python + un buen depurador (este ejemplo usa Wingide, que encontré una herramienta excelente) Este ejemplo asume la carpeta C:\Python27

Paso 2

Cree una carpeta web, por ejemplo, en localhost c:\inetpub\wwwroot\mypythonfolder y coloque el siguiente archivo web.config en él:

Note el | Carácter de la tubería en la directiva de ScriptProcessor. Esto se usa por IIS para asignar el script a una aplicación FASTCGI (Paso 3). Debe coincidir con el carácter por carácter el carácter FullPath + Pipe Caracteres + Argumentos Configuración del paso 3 a continuación.

Paso 3

En el archivo AplicationHost.config en C:\Windows\System32\inetsrc\config Folder Place lo siguiente en la sección:

    <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>

Paso 4

En C:\Python27\lib\mylib\myfcgi.py Pon el siguiente código:

import wingdbstub

importar OS, IO, SYS RET = "Medio ambiente:\r\n" para param en OS.ENVIRON.KEYS (): RET = RET + "% S =% S\R\N"% (param, os.environ [ param]) RET = RET + "\ R\nargs:" para arg in en sys.argv: ret = re + arg manand = io.open ("c:\temp\myfcgi.log", 'wb') manejando. (RET) manejar.Cerrar ()

Paso 5

Asegúrese de que IUSR tenga derechos para escribir en su carpeta C:\TEMP

Paso 6

Ponga wingdbstub.py y wingdebugpw en su carpeta C:\python27\lib\mylib \. Esto permitirá la depuración en Wingide. Estos archivos se proporcionan con la instalación de su ala. Nota: Si Python también necesita compilar su código en WingStub.Pyc, IUSR necesita derechos de escritura en esa carpeta desde el python se iniciará en esa cuenta por iis

Paso 6

Abra Wingdb y establezca un punto de interrupción en la línea 'Importar OS, IO, SYS'

Paso 7

Pulse en su navegador http: // localhost/mypythonfolder

Si todo funciona correctamente, ahora debería activarse Wingide para mostrar el código de funcionamiento en su punto de interrupción. Si no,: - O bien, hay un problema de firewall. El python Process se comunica con la interfaz Wingide a través de una conexión TCP, o hay un problema con la seguridad dentro de Wingide. Necesita la versión adecuada del archivo Wingdebugpw, que básicamente contiene una contraseña o un token que valida Acceso contra su instalación de Wingide. Si este no fuera el caso, nadie con acceso a TCP a su PC podría depurar en su código.

Paso 8

Verifique que en C:\TEMP se crea el archivo de registro. Esto también debería funcionar si no puedes obtener el Paso 7 yendo

Paso 9

Tenga en cuenta que esta página desencadena el depurador, pero no devuelve ninguna página al WebBrowser. Algunos antecedentes: el servidor web comunica FastCGI a través de los llamados "registros". Esto significa que cada solicitud de usuario individual llega a su aplicación empaquetada en varios 'registros' separados. Cada registro es una estructura de datos que indica el comienzo de una solicitud, la pregunta de consulta, las variables de publicación, etc. El embalaje de la ONU de estos registros a una sola solicitud es un poco incómoda, sigue la especificación FastCGI de http://www.fastcgi.com/devkit/doc/fcgi-spec.html#s1

Como el contenido de C:\Python27\lib\mylib\myfcgi.py, acabo de caer en una copia de zoofcgi.py proporcionado por Helicontech. Este python puede decodificar estos registros y servir una página y es bastante interesante de depurar. También tenga en cuenta que Helicontech proporciona opcionalmente una DLL que se encuentra entre IIS = y zoofcgi.py, pero esta DLL no es estrictamente necesaria. Creo que implementa una versión ligeramente mejorada y genérica de la implementación de FastCGI que proporciona MSFT. Sin embargo, cuando usa su DLL, cuando desea pasar por su código, el proceso es Terminado, bastante, y IIS/IIS/THE DLL mata a su python cuando concluye que no se devuelve ninguna respuesta dentro de un SEC o 2.

Eso es todo. En principio, la comunicación entre IIS y su python se realiza con tubos con nombre. Debe poder configurarlo utilizando los sockets TCP, pero no estaba capaz de averiguar qué puerto se usa (creo que el STDIN debe transformarse en el puerto que se puede seleccionar () Ed, pero no le dio ningún intento)

1
Robert van Geel