domingo, agosto 19, 2012

Sobre grails y plugins


Por curiosas razones (ocupar cherokee como proxy server y no tener un módulo de AJP) tuvimos un bug con recursos protegidos por SSL, en concreto tomcat nos regresaba recursos con http en vez de https...

La primera aproximación fue excluir los recursos que daban problemas, lo cual no iba a prevenir que esto siguiera pasando, en la configuración se detalla como hacerlo, en concreto hay que usar grails.resources.adhoc.excludes para excluir los recursos que causan problemas.

Cuando volvió a producirse el error se investigó mejor y se analizó el código del plugin de  resurces, de lo cual se llego a un @todo que nos daba problemas... 


○ → find . -name "*.groovy"  | xargs grep -i todo | awk -F'/' '{out=$8; for(i=9;i<=NF;i++){out=out" "$i};print out}'

ResourceTagLib.groovy:               @todo where a module resource is bundled, need to satisfy deps of all resources in the bundle first!
ResourceTagLib.groovy:     * @todo Later, we implement ESP hooks here and add scope="user" or scope="shared"
ResourceTagLib.groovy:        def baseUrl = ''    @todo get from config
ResourceTagLib.groovy:               @todo do we need to toggle http https here based on current request protocol?
ResourceTagLib.groovy:     * @todo this currently won't work for absolute="true" invocations, it should just passthrough these

Navegando por las entrañables aguas del código fuente ajeno llegamos a la función que nos daba el error redirectToActualUrl, la solución fácil y para no esperar una actualización en el plugin fue  sustituir la función por medio de metaprogramación en groovy.


        ResourceProcessor.metaClass.redirectToActualUrl = {ResourceMeta res, request, response ->
            //... Codigo ...
            def u = (grailsApplication.config.grails.serverURL? grailsApplication.config.grails.serverURL.toString() : request.contextPath) + staticUrlPrefix+res.linkUrl
            //... Codigo ...

        }


Como moraleja no hay que confiar mucho en plugins ajenos, hay por todos lados @todo, uno de los que más me afectan son las pruebas unitarias, no toda la funcionalidad de GORM esta integrada, casi siempre se termina haciendo pruebas de integración para solventar este problema. Aún así grails es una herramienta excelente para programar aplicaciones web, no regresaría a java + frameworks para esto...


Publicar un comentario