Sinatra – aplicaciones web Ruby livianas y simples
Publicado el 15 de febrero de 2012Sigo agregando herramientas al baticinturón Ruby. En este caso, estuve jugando un rato con Sinatra: un DSL para crear aplicaciones web rápido y con esfuerzo mínimo. Se trata de una biblioteca de aplicaciones web open source escrita en Ruby.
Empezar es tan fácil como escribir el siguiente código:
#holamundo.rb require 'sinatra' get '/' do 'Hola mundo!' end |
Hecho esto instalamos la gema:
gem install sinatra |
Y lo ejecutamos:
INFO WEBrick 1.3.1
INFO ruby 1.9.3 (2011-10-30) [x86_64-linux]
== Sinatra/1.3.2 has taken the stage on 4567 for development with backup from WEBrick
Con estos sencillos pasos ya tenemos una primera aplicación corriendo con Sinatra, y podemos verla en http://localhost:4567/. Hasta acá encontramos un framework sencillo, bastante liviano, y que sirve para proveer algo medio rápido a través de la web. Es una alternativa a otros tantos frameworks web en Ruby.
Comparándolo con Rails (para compararlo con algo, porque Rails es lo que más hemos oído nombrar del mundillo Ruby), no tiene mucho que ver. No sigue un modelo MVC, y no incluye librerías para vistas, base de datos, etc. Se concentra únicamente en crear aplicaciones web modulares con poco esfuerzo.
Esto no lo transforma en un framework con pocas capacidades. Al haber tantas opciones en el mundo Ruby, podemos usar de todo para crear una aplicación web compleja con varias funcionalidades delegando la responsabilidad a la biblioteca correspondiente.
Sinatra + Haml + Sass
Hace poco usé Sinatra de manera “profesional” por primera vez. Resultó super útil para crear una página web sencilla usando lo aprendido sobre HAML y Sass. Para empezar creé el archivo index.rb para la aplicación, y configuro haml y sass:
require 'sinatra' require 'sass' get '/stylesheet.css' do content_type 'text/css', :charset => 'utf-8' scss :stylesheet end get '/' do haml :home, :layout => :index end |
La primer parte hace que Sinatra use Sass para el estilo css. Al principio tuve algunos problemas con las rutas siguiendo las guías de Sinatra. Pero era tarde en la noche y ya había estado todo el día escribiendo Haml y Sass, así que estaba medio dormido. El archivo de hoja de estilo Sass: stylesheet.scss
lo creé en un directorio views
. Ahí también puse las vistas. Estas rutas son configurables.
La segunda parte, le está diciendo a Sinatra que sirva el archivo Haml home.haml
, con el layout index
. Hasta ahora el proyecto se ve así:
/ Gemfile index.rb views/ stylesheet.scss index.haml - Archivo con el layout home.haml
Con esto ya podemos armar un sitio simple y algo dinámico al contar con el layout. Para definir dónde va a ir el contenido en el layout, usamos yield
como en Rails (creo que en Rails también es así…).
Deploy de aplicación Sinatra en Heroku
Sinatra está basado en Rack, y Heroku soporta aplicaciones basadas en frameworks basados en Rack🙂
Para ejecutar la aplicación en Heroku necesitamos un Gemfile
y un config.ru
en el directorio raíz. El archivo config.ru es bastante simple:
require './index' run Sinatra::Application |
Y el Gemfile:
source 'http://rubygems.org' gem 'rack' gem 'sinatra' gem 'haml' gem 'sass' |
Podemos probar que funciona ejecutando:
rackup -p 9292 config.ru
Si esto funcionó, no queda más que crear la aplicación en Heroku y darle push con git.
El combo Sinatra, Haml, Sass y Heroku me resultó una maravilla. No sé si es por estar acostumbrado a programar Java, pero generalmente hay que configurar tanto que uno está esperando que explote todo cuando se hace el deploy. Siguiendo la documentación de Sinatra y Heroku, pude dejar funcionando el sitio web con relativamente poco esfuerzo.
Obviamente esto es apenas la punta del iceberg. Sinatra se usa en sitios como Heroku, Github y EngineYard. Y hay muchos proyectos en la vuelta basados en Sinatra.
Mi próximo proyecto con Sinatra es convertir mi página personal de Rails a Sinatra. Usar Rails fue un despropósito, y en su momento lo hice por no conocer otra opción, ahora sí la conozco 🙂
Pablo Kamil 15 febrero. 2012 - 11:08
Muy buen post! Yo estoy trabajando con Sinatra ahora, pero usándolo para una SOA, por lo que no uso templates (no se cargan páginas, sino que se devuelven respuestas JSON). Estoy usando la gema RABL para armar las respuestas JSON y la verdad es que está muy bueno.
Fernando 15 febrero. 2012 - 11:22
¡Gracias! Ese es otro ejemplo para el que me parece que Sinatra es una solución ideal: servicios. Agregas una gema para la respuesta y listo 🙂
HR 23 febrero. 2012 - 12:10
Muy buen post, a mi sinatra me parece una muy buena herramienta, al igual que ramaze, haml la verdad no me parece muy usable, prefiero builder para “maquetear” http://builder.rubyforge.org/ es muy bueno ya que es siempre en ruby y no archivos interpretados que deben parsearse.
En fin, todas son muy buenas herramientas, saludos
Fernando 29 febrero. 2012 - 02:25
Gracias por tu aporte. Voy a revisar Builder a ver qué tal me llevo.
Como decís, todas buenas herramientas, cuestión de agarrarles la mano y usarlas cuando se debe.
¡Saludos!