Para reactivar la comunidad necesitamos tu opinión

Nos gustaría saber que podemos hacer para mejorar. Ayúdanos llenando este formulario

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, 5 años de experiencia en desarrollo web
https://github.com/uokesita. Twitter: @uokesita

Tags: ruby

Comparte este articulo: