Después de un lapso de varios mesos de haber desarrollado mi primer prototipo de aplicación, volví a retomar el desarrollo en Google App Engine por un proyecto interno nuevo que surgió en mi empresa Eforcers. Esta vez la aplicación a desarrollar es una herramienta que está planteada a largo plazo y que va a ir evolucionando según nuestras propias necesidades. Por este motivo al mirar atrás, vi que utilizar el framework web_app de Google no era la solución más robusta e indicada para el alcance del proyecto, en especial teniendo a Django como una posible alternativa. A continuación voy a presentar los recursos que utilicé para luego plantear el problema y ver como las fichas del rompecabezas van cuadrando y mostrar mi solución.
Los Recursos
En esta travesía el primer recurso que fue fundamental, fue una de las sesiones de Google I/O a que no pude asistir por conflicto de horarios, pero afortunadamente fue grabado en video y subido a YouTube. En esta sesión Guido van Rosum, creador de Python y empleado de Google, explica muy claramente y con ejemplos cómo aprovechar lo mejor de Django en el App Engine e introduce el segundo recurso; el proyecto Google App Engine Django desarrollado por dos empleados de Google.
Este proyecto sirve como "ayudante" y provee la implementación de los archivos básicos para cualquier aplicación que quiera usar Django en App Engine teniendo en cuenta las restricciones impuestas. El proyecto se compone de los archivos: main.py, manage.py, settings.py, urls.py, el famoso app.yaml y el directorio de la librería appengine_django que entre otras provee una implementación de contrib/auth de la cual hablaré en un futuro post. Este artículo introduce el proyecto, muestra su uso y configuración.
Desde el punto de vista de la interfaz de usuario, simplemente ya no me preocupo por la selección de la librería, Dojo Toolkit ofrece todo lo necesario y versión tras versión es mejor. Sin embargo para la integración con Django y minimizar la plomería, valío la pena experimentar con un proyecto de la gente de Uxebu, todos ellos commiters de dojo, el proyecto es dojango y resulta muy útil para evitar código que usualmente se repite página tras página como la definición del perfil de dojo usado (local, cross domain, AOL o Google) la versión, los estilos CSS del tema, entre otras bondades; en el futuro sus creadores prometen integrar con django.forms para la generación automática de los dijits.
El Problema
En resumen el problema de raíz fueron las versiones. En primer lugar Google App Engine incorpora la versión 0.96 de Django, la cual es una versión desactualizada y no incluye muchas de las mejoras que están en la versión 1.0, el motivo 0.96 era la versión más estable al momento de desarrollo del App Engine, además dojango requiere una versión mayor o igual a 1.0. Otra parte del problema fue que el "ayudante" únicamente soporta la versión 0.96 o la última de desarrollo.
Otro problema que surgió, esta vez por restricciones del App Engine en producción fue el límite de 1000 archivos para la inclusión de Django.
La Solución
En definitiva la solución fue muy simple pero a la vez muy inusual, bajar las últimas versiones del trunk de subversión de todos los proyectos, aparte de cierta familiarización con el comando svn checkout este proceso no requiere nada más.
En cuanto a la otra preocupación, aprovechando el reciente soporte a zipimport la solución fue seguir las instrucciones planteadas en este artículo:
- Descargar Django
- Empaquetar Django en un archivo zip, django.zip
- Remover del archivo zip los módulos no soportados/no necesarios, como la consola de administración, los archivos de traducciones locales (obviamente excepto español e inglés)
- No olvidar adicionar los módulos en contrib que requiere el "ayudante" que son: auth, sessions, sites.
- Copiar el zip al directorio raíz de la aplicación
- Con el "ayudante" no es necesario hacer nada más, desde que el nombre sea django.zip
Obviamente se supone que en el futuro van a salir versiones nuevas de todos estos componentes y para entonces muchos de estos problemas se habrán solucionado. Aprovechando que toque el tema del futuro estoy intrigado por el soporte a un nuevo lenguaje en tiempo de ejecución según el roadmap publicado (mi predicción esta entre PHP y Java). De todos modos en el poco contacto que he tenido con Python me he sentido muy cómodo y veo grandes fortalezas en este lenguaje. Por otro lado, creo que el proyecto dojango va a evolucionar hasta convertise en el comprehesivo Zend_Dojo de Python brindando muchos otros "goodies" que estoy seguro facilitarán el desarrollo de apps en Dojo y mejorarán la productividad.



