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" ] ]
end
Ejecute esto usando la gema rackup u otro servidor web compatible.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello World
Rack 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 # default
La 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 # default
El 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_limit
El 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-session
Proporciona 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.