Ver Mensaje Individual
  #47  
Antiguo 31-03-2011
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Reputación: 20
D-MO Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¿A qué te refieres con esto?
Interesante... ¿No?

Como sabemos, no todos tenemos la plata para pagar un servidor dedicado y muchas veces las aplicaciones no tendrán tanta demanda como para justificar este gasto. Ese es el punto fuerte de PHP, me atrevería a decir que todos los proveedores de hospedaje web compartido ofrecen soporte pare este. Con Python/Django la situación es otra .

Cualquier aplicación/script python puede correr en el servidor web de varias formas, mi favorita es FastCGI (aquí las demás).

Entonces, lo que necesitamos para tener django corriendo en un servidor web es, Python en el Servidor y soporta para FastCGI (en mi caso).

FastCGI es soportado casi en la mayoría de los servidores web, aquí el punto a favor.

Python está en casi todas las distribuciones linux desde que se instala, sin embargo, para instalar django es necesario agregar a nuestro "PYTHON_PATH" la ubicación tanto de Django, como de todos las herramientas adicionales que utilizaremos (reportlab, pil, etc) que de manera predeterminada no estarán en el servidor. El problema se presenta al momento de quered instalar estas herramientas, podemos hacerlo manual, agregando una a una las ubicaciones de estos paquetes dentro de el archivo de arranque del fastcgi, pero sería un trabajo sucio.

La solución a esto es:

Primero: Compilar los fuentes de Python e instalarlo dentro de la carpeta de usuario en el servidor, así tendríamos una instalación privada de python. En mi caso fué muy fácil gracias a que en esta cuenta tengo acceso vía ssh, pero pienso que igual podría compilarlo en local y cargarlo al servidor.

Compilados los fuentes, podemos instalar cualquier paquete python, descargamos los fuentes de estos y ejecutamos /home/<user>/bin/python setup.py install. Este comando instalará el paquete en la ruta de nuestro python, no el que tenía el servidor. Así instalamos django y cualquier otro que necesitemos.

Segundo: Como tenemos soporte fastcgi, tenemos que crear un archivo en nuestro directorio cgi-bin (el comun en servidores compartidos), llamémosle "cargadorfcgi.py", con el siguiente contenido:

Código:
#!/home/<user>/bin/python

import sys, os

os.environ['DJANGO_SETTINGS_MODULE'] = "djangoproject.settings"

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")
Importante la primera línea, pues indicames en que ubicación está el interprete de este código, así el FastCGI ejecutará el archivo y el SO lo pasará a nuestro interprete.

Luego indicamos en la tercera línea el módulo que deberá cargar con la configuración del proyecto.

y sobreescribimos la url para que todas las peticiones a la raiz sean enviadas al fastcgi, quedando el .htaccess de esta manera (no soy ningun experto en esto, quizá se pueda mejorar)
Código:
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(cgi-bin/cargadorfcgi.py)
RewriteRule ^(.*)$ cgi-bin/cargadorfcgi.py/$1 [L]
En sí esta es la idea, puede mejorarse... ¡¡Y mucho!!, pero la base acá está. No he tenido ningún problema con ello y lleva funcionando desde el 13 de septiembre del 2010 (ls -F ./cgi-bin)

Espero que sirva de algo.

Saludos Cordiales
Responder Con Cita