Segunda-feira, Janeiro 02, 2012

Modularizando projetos com ruby e rails

Objetivo

Modularizar aplicações Ruby on Rails utilizando Rails Engine e Ruby Gems.

Como chegamos a solução

A algumas semanas estávamos avaliando mudanças em nossa forma de desenvolver projetos web, já que a mais de um ano vinhamos utilizando um framework próprio escrito em Java para este fim, quando criamos o mesmo pensamos em uma forma de reutilizar módulos em outros projetos de forma a sermos mais rentáveis. Este framework no quesito reutilização era muito bom mas no quesito velocidade de desenvolvimento era muito ruim,  sabe aquele ciclo usando maven? onde se tem que compilar, publicar e rodar como debug etc.

Em paralelo aos projetos maiores começamos a criar projetos menores usando Ruby on Rails e começamos a conviver com uma velocidade de desenvolvimento nunca antes praticada, começamos então a medir essa performance, comparando com os projetos escritos no framework Java. 

O  Ruby on Rails no quesito velocidade de desenvolvimento não deixava a desejar, mas ainda tínhamos o problema de modularização, que nas versões anteriores ao Ruby on Rails 3.0 era feita via Plugins e era muito ruim.

Mas tivemos muita sorte, pois montamos nosso projeto de validação da hipótese sobre Ruby on Rails 3.1.3, onde já existia uma forma de fazer esse trabalho de forma muito melhor, foi criada uma API no Ruby on Rails chamada Rails Engine e com a utilização de Ruby Gems conseguimos ter o mesmo modelo de modularização que no framework escrito Java usando OSGI.

Exemplos utilizados

Para aprender estes recursos usamos exemplos disponíveis no github, voce pode utilizar vários exemplos aqui estão dois que usei para executar o que queríamos o primeiro é Rails-3-engine-example e o segundo é o rails-engine-sample.

Projeto Portal

Para finalizar criamos um projeto chamado portal onde este depende das gems criadas.
Nesse projeto podemos mudar as configurações de html, css e javascripts e podemos estender as funcionalidades das gems sem destruir a estrutura base que pode ser usada por vários projetos ao mesmo tempo.

Finalizando

Espero com esta explicação simples ter passado todas as dicas necessárias de como reutilizar código entre projetos Ruby on Rails 3.1.3.