Jan 27, 2012

Aplicaciones Rack

Que es una aplicación rack?

Una aplicación rack es cualquier objeto que responda al metodo call(), toma un solo argumento y retorna un arreglo que contiene el código de respuesta, los headers de respuesta HTTP y el cuerpo que debe responder al metodo each() por ejemplo un string, esto es lo que se llama la especificación de una aplicación rack.

Rack provee una interfaz minima, modular y adaptable para desarrollar aplicaciones en ruby, se ubica entre tu aplicación web y el servidor web manejando peticiones y respuestas HTTP de una manera simple.

Usando Rack

Veamos como hacer una aplicación rack con un "Hola Coders!". Esta aplicación retornara un status code de 200 y el texto "Hola Coders" como cuerpo de respuesta.

                class HolaCoders
                  def call(env)
                    [200, {"Content-Type" => "text/html"}, ["Hola Coders!"]]
                  end
                end

Como puedes ver, el objeto HolaCoders cumple con la especificaciones de una aplicación rack:

  • - Es un objeto que responde al metodo call() y toma un solo argumento.
  • - Este metodo retorna un arreglo que contiene lo especificado, status code, headers de respuesta y el cuerpo de respuesta.

Ahora para correr este app con el servidor Thin necesitamos agregarle algunas cosas:

                require 'rubygems'
                require 'thin'
                
                class HolaCoders
                  def call(env)
                    [200, {"Content-Type" => "text/html"}, ["Hola Coders!"]]
                  end
                end
                
                Rack::Handler::Thin.run(HolaCoders.new, :Port => 9000)

Para correrlo simplemente lo guardamos como rack.rb (o cualquier otro nombre) y lo ejecutamos con ruby rack.rb. Un servidor Thin estará corriendo y Rack pasara las peticiones entre el servidor y tu aplicación.
Ahora solo abre tu navegador en http://localhost:9000, y veras tu saludo.

Como ves es muy simple hacer una aplicación rack, y puede ser mucho mas simple, el objeto Proc de ruby responde al metodo call() asi que podemos modificar nuestro código de esta forma:

                require 'rubygems'
                require 'thin'
                
                app = Proc.new do |env|
                  [200, {"Content-Type" => "text/html"}, ["Hola Coders!"]]
                end
                
                Rack::Handler::Thin.run(app, :Port => 9000)

Rack puede usarse para combinar muchas aplicaciones actuando como middleware, en el proyecto rack-contrib puedes encontrar varias aplicaciones rack de ejemplo.

Ingeniero en Informatica, 4 años de experiencia en desarrollo web
https://github.com/uokesita @uokesita

Tags: ruby

Comparte este articulo: