A menudo escucho el término 'middleware' en el contexto de Ruby on Rails. ¿Qué es exactamente? ¿Puedes dar ejemplos específicos?¿Qué es middleware cuando se hace referencia en el contexto de Ruby on Rails?
Respuesta
Middleware está relacionado con Rack, la API estándar de Ruby para aplicaciones web. Como las aplicaciones de Rails son aplicaciones de Rack en estos días, se aplican a ambas.
Rack middleware es todo lo que hay entre los servidores de aplicaciones (Webrick, Thin, Unicorn, Passenger, ...) y la aplicación real, como la aplicación Rails. Es el pipeline entre el servidor de aplicaciones web y la aplicación en sí.
La entrada a una aplicación de Rack es un "entorno" que contiene todos los detalles de solicitud HTTP (y más). El resultado es una respuesta HTTP. Las capas de middleware son como los filtros que pueden modificar la entrada, la salida o ambas cosas. Rails usa middleware en implement some of its features (caché de consultas, tiendas de cookies, expansión del método http), pero puede agregar el suyo propio.
El middleware de Rack es una forma efectiva de reutilizar el comportamiento simple relacionado con la web en aplicaciones web que usan Rack, independientemente del marco subyacente. Si una parte de su aplicación agrega funcionalidad, pero no es responsable de una respuesta HTTP, califica como middleware Rack.
Algunos ejemplos de cosas que podría implementar como Rack middleware incluyen:
- almacenamiento en caché HTTP (servidor y cliente)
- registro
- autenticación
- Monitoreo
- cabecera HTTP filtrado
Ver también this SO question.
Echar un vistazo a CodeRack puede ayudar a comprender cuáles son algunas de las posibilidades. Ahora, cuando pides que a menudo lo escuches en el contexto de Ruby on Rails, ¿en general estás preguntando qué es el middleware?
Imagine que desea crear un servicio de almacenamiento en caché. Este servicio de caché sería independiente de la aplicación por lo que podría usarlo con muchas aplicaciones. También te gustaría admitir muchos servidores web diferentes.
¿Te das cuenta de cómo se ubica en el medio entre el servidor y el marco? Es un ejemplo de middleware. No se trata de lógica de aplicaciones y tampoco de redes de bajo nivel, pero ofrece un servicio intermedio. Algunos ejemplos son QoS (calidad de servicio), Seguridad, almacenamiento en caché, ...
Sería bueno si su servicio admite todos n de los servidores populares (y algunos de los no tan populares) (thin , webrick). Si los apoyaste, todas las personas podrían usar tu maravilloso software. Podrías ver que hacer que esto ocurriera sería una verdadera traba, necesitarías soportar cada servidor con un código especial específico del servidor.
Ahora eso es solo la mitad del problema porque también hay varios frameworks web. Rails es el gorila de 500 lb pero hay otros frameworks, como Merb y Sinatra. Soportar esto en su servicio de almacenamiento en caché es otra m cosas diferentes para apoyar. Ahora admite n x m rutas diferentes. Qué lata.
Ingrese Rack. Rack se encuentra entre los marcos y los servidores y le proporciona una interfaz para codificar su servidor de almacenamiento en caché. Si los servidores y las infraestructuras admiten rack, y la mayoría lo hace, su servicio solo necesita admitir la interfaz de rack y obtendrá soporte para todos los marcos y soportes de rack de servicios. (Es un poco como compilación de latex a dvi y luego convirtiendo el dvi en ps, pdf, ....). No necesita un convertidor de Merb a WEBrick y otro de Sinata a Thin. Si su servicio de almacenamiento en caché admite bastidor, está aislado de las diferencias.
Con esta "cintura estrecha", donde m-frameworks se combinan antes de ramificarse a n-servers entre la aplicación y el servidor también puede ver cómo proporciona un buen lugar para agregar funcionalidad como enrutamiento, registro, estática servicio que evita la lentitud de su marco interpretado, etc.
El middleware de Rails le permite detectar la solicitud o la respuesta antes de que llegue a Rails y modificarla. (Usted está en el medio entre Rack y Rails). Por ejemplo, puede tomar cada respuesta que devuelva un tipo de mime "imagen/png" y agregarle una marca de agua antes de dejar que se mueva a Rack para que se sirva. O bien, puede filtrar las solicitudes que no le agradan por alguna razón (no autorizadas, no tienen un encabezado) y nunca dejar que lleguen a los rieles. O puede agregar un encabezado a una solicitud entrante antes de pasarla a los rieles. O puede tomar una respuesta proveniente de rieles, y si es "text/html" puede comprimir html (eliminar espacios en blanco, etc.) antes de pasar a la salida. (Estaba experimentando con él en http://github.com/maxim/html_press)
Estas pequeñas aplicaciones son suficientes y están conectadas como "middleware".
Explicación a un niño de 4 años:
¿Recuerdas el juego: "Chinese whispers" que jugó como un niño? (sin intención de racismo, así era como se llamaba el juego en mi época). Desea decirle a su amigo, que se encuentra al otro lado de la línea, un mensaje especial. pero no puede decirle directamente a él o ella: debe pasar su mensaje de persona a persona hasta que finalmente llegue a él o ella.
Pero con más frecuencia no encontrará que los cambios en el mensaje suceden a medida que avanza por la cadena, hasta que llega al punto final. Por ejemplo:
- Originador: “Usted siempre recordará esto como el día en que casi atrapan el capitán Jack Sparrow.”
- Persona 1 - pasa en: “Usted siempre recordará el día que casi atrapado Capitán Jack Sparrow. "
- Persona 2 - pasa:" Siempre recordarás el día en que casi atrapaste al Capitán Jack Sparrow. "
- Persona 3 - pasa:" Recordarás el día que atrapaste al Capitán Jack Gorrión. "
- Pe rson 4 - pasa: "Recordarás al Capitán Jack Sparrow.”
- Mensaje final recibió:‘recordar’
Middleware son básicamente las personas en entre usted, el creador del mensaje, y el mensaje final que se recibió: aviso cómo pueden cambiar o filtrar la ¿mensaje? Eso es un poco de lo que se trata el middleware en pocas palabras. De acuerdo, la anologÃa es tensa, pero esperemos que eso le proporcione una base sobre la cual pueda entender las respuestas más tà © cnicas anteriores.
- 1. En Ruby on Rails, ¿qué hace authenticate_with_http_basic?
- 2. ¿Qué hace el yo en ruby on rails?
- 3. ¿Qué hace el método 'to_sym' de Ruby on Rails?
- 4. ¿Qué es MVC en Ruby on Rails?
- 5. Ruby on Rails: alias_method_chain, ¿qué es exactamente?
- 6. Ruby on Rails: descargable
- 7. Ruby on Rails 3. Cada uno hace el problema
- 8. ¿Qué significa "andamio" en Ruby on Rails?
- 9. ¿Qué es más rápido ASP.NET MVC o Ruby On Rails
- 10. Ruby vs. Ruby on Rails
- 11. El último 20% en Ruby on Rails
- 12. En Ruby on Rails, ¿qué significa "recurso"?
- 13. Diciendo qué proyecto de ruby on rails se está ejecutando
- 14. Haciendo referencia al usuario actual en Ruby on Rails
- 15. Ruby on Rails: Hello World
- 16. ¿Qué hace% {} en Ruby?
- 17. Docsplit Ruby on Rails
- 18. Ruby on Rails. Rutas Unicode
- 19. Ruby on Rails redirect_to arguments
- 20. Usos de Ruby on Rails
- 21. ¿Qué es ORM relacionado con Ruby on Rails?
- 22. Ruby on Rails en IIS?
- 23. link_to con Ruby on Rails
- 24. Ruby on Rails versus Python
- 25. Ruby on Rails will_paginate
- 26. Problemas de Ruby on Rails en heroku
- 27. Ruby on Rails: ¿qué significa el símbolo "igual" como parámetro?
- 28. función Expose en Ruby on Rails
- 29. Ruby on Rails enviar
- 30. Ruby on Rails Switch
Rack no es exactamente middleware, es una interfaz simple que facilita la comunicación entre los servidores y la aplicación web. Rack permite middleware, pero no es uno en sí mismo. –
Respondió sus comentarios. Gracias. –