
Rack proporciona una interfaz mínima, modular y adaptable para desarrollar aplicaciones web en Ruby. Al envolver solicitudes y respuestas HTTP de la forma más sencilla posible, unifica y destila el puente entre servidores web, marcos web y aplicaciones web en una única llamada a método.
Los detalles exactos de esto se describen en la Especificación del Rack, que deben cumplir todas las aplicaciones del Rack.
| Versión | Apoyo |
|---|---|
| 3.1.x | Corrección de errores y parches de seguridad. |
| 3.0.x | Solo parches de seguridad. |
| 2.2.x | Solo parches de seguridad. |
| <= 2.1.x | Fin del soporte. |
Consulte la Política de seguridad para obtener más información.
Esta es la última versión de Rack. Contiene correcciones de errores y parches de seguridad. Consulte el Registro de cambios para obtener información detallada sobre cambios específicos.
Esta versión del rack contiene cambios importantes que se detallan en la Guía de actualización. Se recomienda actualizar a Rack 3 lo antes posible para recibir las últimas funciones y parches de seguridad.
Esta versión de Rack solo recibe parches de seguridad y se debe hacer un esfuerzo para pasar a Rack 3.
A partir de Ruby 3.4, la dependencia base64 ya no será una gema predeterminada y puede provocar una advertencia o un error sobre la falta base64 . Para corregir esto, agregue base64 como una dependencia a su proyecto.
Agregue la gema rack a su paquete de aplicaciones o siga las instrucciones proporcionadas por un marco web compatible:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Si necesita funciones de Rack::Session o bin/rackup agregue esas gemas por separado.
$ gem install rack-session rackup Cree un archivo llamado config.ru con el siguiente contenido:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endEjecute esto usando la gema rackup u otro servidor web compatible.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack es compatible con una amplia gama de servidores, que incluyen:
Deberá consultar la documentación del servidor para saber qué características y limitaciones pueden tener. En general, cualquier aplicación Rack válida se ejecutará igual en todos estos servidores, sin cambiar nada.
Rack proporciona una joya separada, rackup, que es una interfaz genérica para ejecutar una aplicación Rack en servidores compatibles, que incluyen WEBRick , Puma , Falcon y otros.
Estos marcos y muchos otros admiten la especificación de bastidor:
Entre el servidor y el marco, Rack se puede personalizar según las necesidades de sus aplicaciones mediante middleware. El propio Rack se envía con el siguiente middleware:
Rack::CommonLogger para crear archivos de registro estilo Apache.Rack::ConditionalGet para devolver respuestas No modificadas cuando la respuesta no ha cambiado.Rack::Config para modificar el entorno antes de procesar la solicitud.Rack::ContentLength para configurar un encabezado content-length según el tamaño del cuerpo.Rack::ContentType para configurar un encabezado content-type predeterminado para las respuestas.Rack::Deflater para comprimir respuestas con gzip.Rack::ETag para configurar el encabezado etag en cuerpos que se pueden almacenar en búfer.Rack::Events para proporcionar enlaces sencillos cuando se recibe una solicitud y cuando se envía la respuesta.Rack::Files para servir archivos estáticos.Rack::Head para devolver un cuerpo vacío para solicitudes HEAD.Rack::Lint para comprobar el cumplimiento de las especificaciones del rack.Rack::Lock para serializar solicitudes mediante un mutex.Rack::MethodOverride para modificar el método de solicitud según un parámetro enviado.Rack::Recursive para incluir datos de otras rutas en la aplicación y para realizar redirecciones internas.Rack::Reloader para recargar archivos si han sido modificados.Rack::Runtime para incluir un encabezado de respuesta con el tiempo necesario para procesar la solicitud.Rack::Sendfile para trabajar con servidores web que pueden utilizar un servicio de archivos optimizado para rutas del sistema de archivos.Rack::ShowException para detectar excepciones no controladas y presentarlas de una manera agradable y útil con un seguimiento en el que se puede hacer clic.Rack::ShowStatus para usar páginas de error agradables para respuestas de error de cliente vacías.Rack::Static para una entrega más configurable de archivos estáticos.Rack::TempfileReaper para eliminar archivos temporales creados durante una solicitud.Todos estos componentes utilizan la misma interfaz, que se describe en detalle en las Especificaciones del bastidor. Estos componentes opcionales se pueden utilizar de la forma que desee.
Si desea desarrollar fuera de los marcos existentes, implementar los suyos propios o desarrollar middleware, Rack proporciona muchas ayudas para crear aplicaciones Rack rápidamente y sin tener que hacer las mismas cosas web en todas partes:
Rack::Request que también proporciona análisis de cadenas de consulta y manejo de varias partes.Rack::Response para una generación conveniente de respuestas HTTP y manejo de cookies.Rack::MockRequest y Rack::MockResponse para realizar pruebas rápidas y eficientes de la aplicación Rack sin viajes de ida y vuelta HTTP reales.Rack::Cascade para probar aplicaciones de Rack adicionales si una aplicación devuelve una respuesta no encontrada o un método no compatible.Rack::Directory para servir archivos en un directorio determinado, con índices de directorio.Rack::MediaType para analizar encabezados de tipo de contenido.Rack::Mime para determinar el tipo de contenido según la extensión del archivo.Rack::RewindableInput para hacer que cualquier objeto IO sea rebobinable, utilizando un búfer de archivo temporal.Rack::URLMap para enrutar a múltiples aplicaciones dentro del mismo proceso. Rack expone varios parámetros de configuración para controlar varias características de la implementación.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultLa cantidad máxima de anidamiento permitida en los parámetros. Por ejemplo, si se establece en 3, se permitiría esta cadena de consulta:
?a[b][c]=d
pero esta cadena de consulta no estaría permitida:
?a[b][c][d]=e
Limitar la profundidad evita un posible desbordamiento de la pila al analizar los parámetros.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultEl número máximo de partes con un nombre de archivo que puede contener una solicitud. Aceptar demasiadas partes puede hacer que el servidor se quede sin identificadores de archivos.
El valor predeterminado es 128, lo que significa que una sola solicitud no puede cargar más de 128 archivos a la vez. Establezca en 0 para que no haya límite.
También se puede configurar mediante la variable de entorno RACK_MULTIPART_FILE_LIMIT .
(Esto también tiene el alias multipart_part_limit y RACK_MULTIPART_PART_LIMIT por compatibilidad)
multipart_total_part_limitEl número total máximo de partes que una solicitud puede contener de cualquier tipo, incluidos los campos de formulario de archivo y no archivo.
El valor predeterminado es 4096, lo que significa que una sola solicitud no puede contener más de 4096 partes.
Establezca en 0 para que no haya límite.
También se puede configurar mediante la variable de entorno RACK_MULTIPART_TOTAL_PART_LIMIT .
Consulte CHANGELOG.md.
Consulte CONTRIBUTING.md para obtener detalles específicos sobre cómo hacer una contribución a Rack.
Publique errores, sugerencias y parches en GitHub Issues.
Consulte nuestra Política de seguridad para conocer la divulgación responsable y el proceso de notificación de errores de seguridad. Debido al amplio uso de la biblioteca, se recomienda encarecidamente que gestionemos el tiempo para proporcionar parches viables en el momento de la divulgación. Se agradece enormemente su ayuda en este asunto.
rackup Una herramienta útil para ejecutar aplicaciones Rack desde la línea de comandos, incluido Rackup::Server (anteriormente Rack::Server ) para servidores de secuencias de comandos.
rack-contrib La gran cantidad de middleware útil creó la necesidad de un proyecto que recopile middleware Rack nuevo. rack-contrib incluye una variedad de componentes complementarios para Rack y es fácil contribuir con nuevos módulos.
rack-sessionProporciona una cómoda gestión de sesiones para Rack.
El Rack Core Team, formado por
y los antiguos alumnos de Rack
quisiera agradecer:
Rack::Deflater .Rack::ContentType .Rack::Response .Rack::Response .Rack se publica bajo la licencia MIT.