Sinatra

Sinatra

Sigo 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:

ruby -rubgems holamundo.rb
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

Sinatra + Haml + Sass

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

Heroku

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:

bundle install
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 🙂

4 comentarios en este post

Feed de comentarios
  1. Avatar

    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.

    Google Chrome 17.0.963.46 Windows XP
  2. Avatar

    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

    Google Chrome 16.0.950.0 Windows XP
    • Avatar

      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!

      GNU IceCat 10.0 GNU/Linux 64 bits

Responder a Fernando

Clic para cancelar respuesta.

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.

Toasty!