Usando el estante

En el artículo anterior, aprendiste qué es Rack. Ahora, es hora de comenzar a usar Rack y publicar algunas páginas.

Hola Mundo

Primero, comencemos con una aplicación de "Hola mundo". Esta aplicación, sin importar qué tipo de solicitud se le dé, regresará con un código de estado de 200 (que es HTTP-speak para "OK") y la cadena "Hola Mundo" como el cuerpo.

Antes de examinar el siguiente código, considere nuevamente los requisitos que debe cumplir cualquier aplicación Rack.

Una aplicación Rack es cualquier objeto Ruby que responde al método de llamada, toma un solo parámetro hash y devuelve una matriz que contiene el código de estado de respuesta, los encabezados de respuesta HTTP y el cuerpo de la respuesta como una matriz de cadenas.
clase HelloWorld
llamada de def (env)
volver [200, , ["¡Hola mundo!"]]
final
final

Como puede ver, un objeto del tipo Hola Mundo cumplirá con todos estos requisitos. Lo hace de una manera mínima y no muy útil, pero cumple con todos los requisitos..

WEBrick

Eso es bastante simple, ahora conéctelo a WEBrick (el servidor HTTP que viene con Ruby). Para hacer esto, usamos el Rack :: Manejador :: WEBrick.run método, páselo una instancia de Hola Mundo y el puerto para correr. Ahora se ejecutará un servidor WEBrick, y Rack pasará solicitudes entre el servidor HTTP y su aplicación.

Tenga en cuenta que esta no es una forma ideal de lanzar cosas con Rack. Aquí solo se muestra para ejecutar algo antes de sumergirse en otra función de Rack llamada "Rackup", que se muestra a continuación. Usar Rack :: Handler de esta manera tiene algunos problemas. Primero, no es muy configurable. Todo está codificado en el guión. En segundo lugar, como notarás si ejecutas el siguiente script, no puedes matar el programa. No responderá a Ctrl-C. Si ejecuta este comando, simplemente cierre la ventana de terminal y abra una nueva.

#! / usr / bin / env ruby
requiere 'estante'
clase HelloWorld
llamada de def (env)
volver [200, , ["¡Hola mundo!"]]
final
final
Rack :: Manejador :: WEBrick.run (
HelloWorld.new,
: Puerto => 9000
)

Acumular

Si bien esto es bastante fácil de hacer, no es cómo se usa normalmente Rack. Rack se usa normalmente con una herramienta llamada acumular. Rackup hace más o menos lo que estaba en la sección inferior del código anterior, pero de una manera más útil. Rackup se ejecuta desde la línea de comandos y recibe un .ru "Archivo Rackup". Este es solo un script Ruby que, entre otras cosas, alimenta una aplicación a Rackup.

Un archivo Rackup muy básico para lo anterior se vería así.

clase HelloWorld
llamada de def (env)
regreso [
200,
'Content-Type' => 'text / html',
["¡Hola Mundo!"]
]
final
final
ejecutar HelloWorld.new

Primero, tuvimos que hacer un pequeño cambio en el Hola Mundo clase. Rackup ejecuta una aplicación de middleware llamada Estante :: pelusa que la cordura verifica las respuestas. Todas las respuestas HTTP deben tener un Tipo de contenido encabezado, por lo que se agregó. Luego, la última línea solo crea una instancia de la aplicación y la pasa al correr método. Idealmente, su aplicación no debería estar escrita completamente dentro del archivo Rackup, este archivo debería requerir su aplicación y crear una instancia de esa manera. El archivo Rackup es solo "pegamento", no debe haber ningún código de aplicación real.

Si ejecutas el comando rackup helloworld.ru, iniciará un servidor en el puerto 9292. Este es el puerto Rackup predeterminado.

Rackup tiene algunas características más útiles. Primero, cosas como el puerto se pueden cambiar en la línea de comando, o en una línea especial en el script. En la línea de comando, simplemente pase un -puerto p parámetro. Por ejemplo: rackup -p 1337 helloworld.ru. Desde el script en sí, si la primera línea comienza con # \, entonces se analiza igual que la línea de comando. Así que también puedes definir opciones aquí. Si desea ejecutar en el puerto 1337, la primera línea del archivo Rackup podría leer # \ -p 1337.