Articulo de referencia

WEBrick

{{cite web|url=https://docs.ruby-lang.org/en/2.7.0/WEBrick.html|title=Module: WEBrick (Ruby 2.7.0)|website=ruby-doc.org|access-date=2016-09-22}} [https://ruby-doc.org/docs/WEBri...

WEBrick es una biblioteca de Ruby que proporciona servidores web HTTP sencillos . Utiliza autenticación de acceso básica y autenticación de acceso digest para los diferentes tipos de servidores que puede crear: servidor basado en HTTP , servidor HTTPS , servidor proxy y servidor de host virtual . [ 4 ] La construcción de varios servidores que no son HTTP, como el Day Time Server, que utiliza el protocolo Daytime en lugar de HTTP, también se facilita mediante WEBrick. Los frameworks Ruby on Rails y Padrino lo utilizan para probar aplicaciones en un entorno de desarrollo , así como en modo de producción para cargas pequeñas. Ahora forma parte de la biblioteca estándar de Ruby. [ 1 ]

WEBrick sigue un modelo de distribución de código abierto .

Historia

WEBrick surgió de una idea plasmada en un artículo titulado "Internet Programming with Ruby" de la revista japonesa de ingeniería Open Design. Inicialmente, se desarrolló como un conjunto de herramientas para la creación de servidores HTTP con Ruby. Gracias a su modelo de código abierto y a las contribuciones de numerosos desarrolladores de Ruby de todo el mundo, WEBrick se amplió considerablemente y finalmente se incluyó como biblioteca estándar a partir de Ruby 1.8.0. [ 2 ] El controlador ERB de WEBrick y el servidor proxy de WEBrick se introdujeron por primera vez en Ruby 1.9.3, mientras que el host virtual de WEBrick se incluyó a partir de Ruby 2.0.0.

Uso

Un servidor WEBrick entiende únicamente el lenguaje de los servlets Archivado el 30/09/2016 en Wayback Machine . Utiliza múltiples servlets independientes, unidos por el programador, para manejar scripts CGI , páginas ERB , bloques Ruby y listados de directorios para proporcionar una aplicación web o atender una URI de solicitud por host o por ruta. Por ejemplo, HTTPServlet::FileHandler , [ 2 ], [ 2 ] HTTPServlet::CGIHandler , [ 2 ] HTTPServlet::ERBHandler [ 2 ] son ​​ejemplos de los servlets estándar que incluye WEBrick.

WEBrick está incluido en Ruby y, por lo tanto, está disponible para el usuario sin costo adicional. WEBrick ha sido escrito completamente en Ruby y es compatible con varios estándares como HTTP, HTML e incluso RHTML . Durante la fase de desarrollo, no es necesario instalar un servidor web independiente, ya que WEBrick está integrado en el framework Rails. Es el servidor web predeterminado cuando la aplicación Ruby se implementa en Rails sin ningún archivo procfile . Además, al estar implementado completamente en Ruby, se pueden realizar llamadas directas desde WEBrick a la aplicación Rails. En resumen, proporciona una opción confiable y de baja configuración para realizar pruebas durante el desarrollo.

Servidores de instanciación

Instanciación de un servidor HTTP

Los siguientes comandos se utilizan para iniciar un servidor HTTP en el puerto requerido. [ 1 ]

# Incluir la clase WEBrick con require require 'webrick'# El servlet FileHandler proporciona la opción de elegir qué archivos del usuario servir. # El siguiente código muestra cómo servirlos desde la carpeta 'myapp' . root = File.expand_path '/var/myapp/'# Instanciando un nuevo servidor con HTTPServer.new en el puerto 1234 que sirve los documentos desde la carpeta raíz server = WEBrick :: HTTPServer . new :Port => 1234 , :DocumentRoot => root# El siguiente procedimiento se utiliza para personalizar las operaciones del servidor server.mount_proc ' /' do | request , response | response.body = ' ¡ Hola, mundo!' end# El siguiente comando proporcionará un gancho para apagar el servidor (a menudo se hace con Ctrl+C) trap ( 'INT' ) { server . shutdown }# Iniciar el servidor server.start

Los servlets se pueden montar para proporcionar un comportamiento personalizado avanzado en comparación con un proc, [ 5 ] para aumentar la modularidad .

Cómo convertirse en anfitrión virtual

WEBrick crea un puerto de escucha. También se pueden crear simultáneamente otros puertos como 'hosts virtuales' que no escuchan, como se muestra a continuación: [ 1 ]

#Creando un host virtual que no escucha vhost = WEBrick :: HTTPServer . new :ServerName => 'vhost.example' , :DoNotListen => true , # ...# Montando el host virtual creado anteriormente de forma similar a como se montó el servidor HTTP vhost . mount '/' , ...# Este host, cuando se monte en el host del servidor de escucha, actuará ahora como un servidor de host virtual . virtual_host vhost

Se debe proporcionar DocumentRoot o configurar una instancia de un servlet para atender una URI de solicitud ; de lo contrario, se devolverá un error 404 .

Instanciación de un servidor HTTPS

Con solo habilitar SSL y proporcionar un nombre de certificado SSL, se puede iniciar un servidor HTTPS con un certificado autofirmado que cambia con cada reinicio del servidor. [ 1 ]

# Además de webrick, también necesitaremos webrick/https para las funcionalidades SSL require 'webrick' require 'webrick/https'# Proporcionando el nombre del certificado. Sin embargo, este será un certificado autofirmado autogenerado cert_name = [ %w[CN localhost] , ]# Habilitar SSL y proporcionar el nombre del certificado instanciará el servidor HTTPS server = WEBrick :: HTTPServer . new ( :Port => 1234 , :SSLEnable => true , :SSLCertName => cert_name )

Sin embargo, también se puede proporcionar una clave y un certificado predeterminados para instanciar el servidor HTTPS, como se muestra a continuación:

# Además de los dos anteriores, necesitaremos openssl para leer certificados SSL y claves require 'openssl'# Lee el certificado guardado y su clave de firma desde el directorio local cert = OpenSSL :: X509 :: Certificate . new File . read '/var/myapp/cert.pem' pkey = OpenSSL :: PKey :: RSA . new File . read '/var/myapp/pkey.pem'# Pasa el certificado y la clave como parámetros separados al instanciar con HTTPServer.new server = WEBrick :: HTTPServer . new ( :Port => 1234 , :SSLEnable => true , :SSLCertificate => cert , :SSLPrivateKey => pkey )

Iniciando un servidor proxy

WEBrick también puede actuar como proxy para las solicitudes GET, HEAD y POST : [ 1 ]

# La instanciación de un servidor proxy es similar, excepto que se maneja mediante el servlet HTTPProxyServer require 'webrick/httpproxy' proxy = WEBrick :: HTTPProxyServer . new :Port => 1234# Proporcionar el gancho para salir del hilo actual trap 'INT' do proxy . shutdown end

Limitaciones

A diferencia de la mayoría de los servidores que se utilizan en producción, WEBrick no es escalable, ya que por defecto es un servidor web de un solo hilo. [ 6 ] Por lo tanto, no puede gestionar múltiples solicitudes al mismo tiempo y las solicitudes posteriores tendrían que esperar hasta que se hayan procesado todas las anteriores, lo que genera una gran demora. Por consiguiente, los desarrolladores prefieren otros servidores web multihilo completos como Lighttpd y Mongrel para desplegar sus aplicaciones Rails . [ 7 ]

Véase también

Referencias

  1. 1 2 3 4 5 6 "Módulo: WEBrick (Ruby 2.7.0)" . ruby-doc.org . Consultado el 22 de septiembre de 2016 .
  2. 1 2 3 4 5 6 Guía del gnomo para WEBrick
  3. "Versión 1.9.2" . 26 de noviembre de 2025. Consultado el 26 de noviembre de 2025 .
  4. Investigación del impacto de los servidores web en el consumo energético de las aplicaciones web - IEEE
  5. proc
  6. Servidor web predeterminado de Heroku Ruby
  7. NetBeans Ruby and Rails IDE con JRuby (FirstPress) Por Chris Kutler, Brian Leonard
  • Guía del gnomo para WEBrick
  • Documentación de la biblioteca estándar de Ruby - WEBrick
  • WEBrick de alto rendimiento