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
endComo 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.
https://github.com/uokesita @uokesita
Tags: ruby
Comparte este articulo: