Por el momento no he sido capaz de conseguir ejecutar scripts Python sobre el servidor web Cherokee de la misma forma que se hace habitualmente con PHP, y creo que lo tengo peludo si realmente quiero eso. Como mucho he conseguido hacer GCIs que funcionan como eso, como CGIs, pero eso no se parece en nada a lo que yo quiero, pues no me ofrece todo el dinamismo necesario.
Por otro lado, conseguí hacer alguna aplicación de prueba en Python que ejecuta su propio servidor web con WSGI (en particular con una librería de Python que implementa wsgi), todo bastante fácil:
#!/usr/bin/python
def handle_request(environment, start_response):
start_response('200 OK', [('content-type', 'text/html')])
return ['Hello, World!']
if __name__ == '__main__':
from wsgiref import simple_server
simple_server.make_server('', 8080, handle_request).serve_forever()
Pero esta aplicación funciona independientemente de cualquier servidor web, y sinceramente, no creo que sea capaz de soportar una gran carga de conexiones, ni que sea excesivamente rápida, por no hablar de la flexibilidad en la gestión del servidor.
Por eso seguí el tutorial de la página web del proyecto Cherokee para cargar Django en el servidor (y también seguí el de Trac, que es básicamente hacer lo mismo), pero cambiando algunas cosas... como por ejemplo, no ejecutar ni Django ni Trac, sino la aplicación que he escrito arriba (que está copiada de un tutorial de esos que se encuentran perdidos por la red). Este modelo es algo más interesante que lo que se hace usualmente con PHP, pues se tiene una aplicación ya cargada en memoria y corriendo en paralelo con el servidor web, sirviendole las vistas cuando éste se las pide. Pero... no sé por qué razón, no lo he conseguido, haciendo un "ps -A" en la shell veo como Cherokee ha cargado mi aplicación (que llamé serv.py, Cherokee carga la aplicación segun los comandos que se le indican si detecta que no hay respuesta en el puerto indicado en la configuración). Cuando arrancaba yo la aplicación manualmente podía acceder directamente al puerto especificado, y si Cherokee intentaba acceder, la aplicación también reaccionaba, aunque no como me hubiera gustado (la modifiqué ligeramente para que hiciera unos logs, pero nada, me parece que saltaban excepciones por todas partes :s ).
Aun así, despues de todo, no estoy tan mal, las pruebas con Django me fueron de maravilla y aunque puede añadir un poco de sobrecarga a mi aplicación, almenos funciona, y por otro lado acelerará el desarrollo.
