Sei sulla pagina 1di 31

Introduccin a Merb Framework

http://www.merbivore.com
Universidad de Palermo, 2012 Arquitectura Web Prof. Carla Ares Isidoro Schmunck
toti.schmunck@gmail.com

Andrs Cabrera
andrescabrera20@gmail.com

Que es Merb?
Merb es un marco de desarrollo de software hecho en Ruby, y es ms modular que Rails; es ms pequeo, y diseado con nfasis en el desempeo. "A medida que desarrollamos en Merb, nos concentramos en su desempeo y modularidad. Rails incluye unas 80 mil lneas de cdigo; el ncleo de Merb tiene solamente 6 mil lneas de cdigo. Hay ms mdulos y podrs usar tantos o tan pocos como quieras. Merb enva respuestas a solicitudes ms rpidamente que Rails, y es mucho ms fcil de entender y adaptar."

Historia
Nacido de un Pastie (http://pastie.org/14416) de Esdras Zygmuntowicz el 9 de septiembre de 2006. Constaba en ese entonces con slo 120 lneas de cdigo fuente. Se busc en sus origenes el renderizado rpido de las plantillas de Ruby, con el footprint de memoria ms pequeo posible. Para ello, utiliz slo dos gemas, Mongrel y ERB, que, sirvieron como raiz de su propio nombre: Merb.

Merb Rails > Rails 3

Cuando usar Merb


Si vas a comenzar un nuevo desarrollo: Rails 3.
Merb 1.x sobre Rails < 3, cuando:

Estas escribiendo una herramienta pequea. Tens limitaciones de requerimientos de memoria. Te gusta probar nuevos ORM's. Buscas alta performance. Tu equipo de desarrollo tiene espiritu hacker.

Merb 1.x | Componentes

Plugins
Los plugins en Merb se implementan como gemas simples, que se distribuyen en la cuenta de merb de GitHub y por otras tambin. Por esto pueden tomar ventaja del control de versiones de RubyGems y el control de dependencias. Se pueden instalar en el repositorio del sistema o empaquetar en el directorio de las gemas en la distribucin de una aplicacin, las aplicaciones de Merb slo tienen que aadir la carpeta /gems como un repositorio alternativo. Los Plugins ya incluyen soporte para ActiveRecord, DataMapper, y la SQL, con soporte para transacciones, generacin de modelo, database.yml y ms.

Controllers & Mailers


Se componen de dos componentes. En primer lugar, un AbstractController, que se ocupa de bsqueda del Template y el Layout, asignacin de las variables de instancia, y filtros before/after. En segundo lugar, un Merb::Controller, que se encarga de la semntica de request/ response. Debido a que los componentes son independientes, es posible heredar de AbstractController, lo cual Merb hace para Mailers y Parts. Poseen un excelente soporte de la negociacin de Content-Type. Podes especificar en los controladores, o en acciones individuales, que tipos MIME deberan ser soportados de la forma: provide :xml, provide :html, etc. Una vez que la informacin es proporcionada, el controlador tiene un nmero de maneras para obtener automticamente el contenido apropiado. Si una plantilla llamada foo.html.erb existe, automticamente se renderizar para todo el tipo text/html, y as sucesivamente.

Mailers
Se implementan sobre la clase AbstractController, as que tienen todo el comportamiento de un controlador por defecto (incluidas las plantillas, asignaciones, y filtros before/after). Pero en lugar de llamar a render, se llama a render_mail, que tiene opciones como: render_mail: html =>: foo,: text =>: bar. Una gran cantidad de opciones estn soportadas, incluyendo archivos adjuntos a travs de un mtodo #attach, para que usted pueda construir sus correo electrnico como multi-part, con archivos adjuntos y layouts de manera bastante trivial. Tienen su propio directorio raz, que contiene clases controlador en su interior, as como un directorio Views (que contiene los diseos, al igual que un controlador normal), y un directorio de Helpers opcional. Debido a que AbstractController puede especificar su raz de Layout de forma trivial, es fcil crear nuevos clases controlador y dejarlos ah. Los Mailers son llamados desde un controlador normal a travs de send_mail Klass, :action, :options, donde las opciones es un hash de opciones tales como from, to, subject, y cc.

Generadores
$ merb-gen --help

Instalacin

Requisitos
Paciencia y Tiempo! Servidor Linux Windows Ruby & RubyGems Un servidor Ruby - http: (Mongrel, Thin, WebRick) Un servidor web: (Apache con Passenger, Nginx)

Instalar Ruby y Prerequisitos


$ yum install ruby $ yum install rubygems

Instalacin de Merb

$ gem install merb --include-dependencies

Instalacin de Mongrel

$ gem install mongrel mongrel_cluster

Generar una aplicacin


$ merb-gen LAYOUT NOMBRE $ merb-gen app holaMundo

Un ABM en Merb
https://github.com/xdite/merb-blog-crud

Clonando el Repositorio

$ mkdir merb-blog-crud $ git clone https://github/xdite/merb-blog-crud $ merb-gen app merb-blog-crud $ cd merb-blog-crud

Dependencias
$ vim Gemfile.rb (usando Bundler)

Migrando la Base de Datos


$ rake db:automigrate MERB_ENV=development

Iniciar Merb
Ejemplo: $ merb -a ADAPTER -p PUERTO -e ENTORNO $ merb -a thin -p 4000 -e development

Probando en el Browser
http://localhost:4000/

Un vistazo al cdigo

Vistas
$ vim app/views/blogs/index.html.erb

Vistas
$ vim app/views/blogs/show.html.erb

Controladores
$ vim app/controllers/blogs.rb

Modelo
$ vim app/models/post.rb

Configuraciones
merb-blog-crud/config/init.rb

ORM / Template Engine / Testing

merb-blog-crud/config/dependencies.rb merb-blog-crud/Gemfile merb-blog-crud/Gemfile.lock

Dependencias del Proyecto Dependencias usando bundler

merb-blog-crud/config/router.rb

Ruteo de Actions (RestFull Compl.)

merb-blog-crud/config/rack.rb

Configuraciones de Rack

merb-blog-crud/config/database.yml

Configuraciones de DataMapper ORM

Despliegue en la nube
Usaremos en esta ocasin el servicio CloudFoundry de VMWare. Nos registramos en el sitio http://www.cloudfoundry.com El servicio nos provee de una gema VMC para la adminitracin de este. $ gem install vmc Migramos la base de datos a produccin $ rake db:automigrate MERB_ENV=production Despliegue interactivo (Estando ubicados en el directorio del proyecto) $ vmc push VMC nos gua a travs de las configuraciones bsicas y nuestra aplicacin estar lista e iniciada en la URL especificada, en nuestro caso: http://merb-blog-crud.cloudfoundry.com

Links
http://www.merbivore.com http://datamapper.org/getting-started.html http://gembundler.com/ http://gembundler.com/rationale.html

Preguntas?