Programación CGI en Ruby
Ruby es un lenguaje de propósito general, no solo un lenguaje aplicado al desarrollo web, pero Ruby es más común en el desarrollo de aplicaciones y herramientas web.
Con Ruby, no solo puede escribir su propio servidor SMTP, programas FTP o un servidor web Ruby, sino que también puede usar Ruby para programación CGI.
A continuación, dediquemos un poco de tiempo a aprender sobre la programación CGI en Ruby.
Navegación web
Para entender mejor cómo funciona CGI, podemos partir del proceso de hacer clic en un enlace o URL en una página web:
- 1. Use su navegador para acceder a la URL y conectarse al servidor web HTTP.
- 2. El servidor web recibe la solicitud, analiza la URL y comprueba si el archivo solicitado existe en el servidor. Si existe, devuelve el contenido del archivo; de lo contrario, devuelve un mensaje de error.
- 3. El navegador recibe la información del servidor y muestra el archivo recibido o el mensaje de error.
Los programas CGI pueden ser scripts de Ruby, scripts de Python, scripts de Perl, scripts de Shell, programas en C o C++, etc.
Diagrama de arquitectura CGI

Soporte y configuración del servidor web
Antes de realizar programación CGI, asegúrese de que su servidor web sea compatible con CGI y de que haya configurado el manejador de CGI.
Configuración de soporte CGI en Apache:
Configure el directorio CGI:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Todos los programas CGI que ejecutan los servidores HTTP se guardan en un directorio preconfigurado. Este directorio se llama directorio CGI y, por convención, se denomina /var/www/cgi-bin.
La extensión de los archivos CGI es .cgi; Ruby también puede usar la extensión .rb.
De forma predeterminada, el directorio cgi-bin configurado en el servidor Linux es /var/www.
Si desea especificar otro directorio para ejecutar scripts CGI, puede modificar el archivo de configuración httpd.conf, como se muestra a continuación:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
Agregue el sufijo .rb en AddHandler, de modo que podamos acceder a los archivos de scripts Ruby que terminan en .rb:
AddHandler cgi-script .cgi .pl .rb
Escribir scripts CGI
El código CGI básico en Ruby es el siguiente:
#!/usr/bin/ruby puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
Puede guardar este código en el archivo test.cgi, subirlo al servidor y asignarle permisos suficientes para que se pueda ejecutar como script CGI.
Si la dirección de su sitio es http://www.example.com/, puede acceder a este programa mediante http://www.example.com/test.cgi y el resultado será: "This is a test.".
Cuando el navegador accede a esa URL, el servidor web buscará el archivo test.cgi en el directorio del sitio y, a continuación, usará el intérprete de Ruby para analizar el código del script y acceder al documento HTML.
Usar cgi.rb
Ruby puede usar la biblioteca CGI para escribir scripts CGI más complejos.
El siguiente código usa la biblioteca CGI para crear un script CGI.
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
En el siguiente código, se crea un objeto CGI y se imprime la información de cabecera.
Procesamiento de formularios
Con la biblioteca CGI se pueden obtener los datos enviados por un formulario (o los parámetros de la URL) de dos maneras, por ejemplo, la URL: /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.
Puede usar CGI#[] para obtener directamente los parámetros FirstName y LastName:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
Otro método para obtener los datos del formulario:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
El siguiente código se usa para recuperar todos los pares clave-valor:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
Si el formulario contiene varios campos con el mismo nombre, los valores de esos campos se guardarán en un array.
En el siguiente ejemplo, se especifican tres campos con el mismo nombre "name" en el formulario, con los valores "Zara", "Huma" y "Nuha" respectivamente:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['name'] # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys # => ["name"]
cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}
Nota:Ruby detecta automáticamente los métodos GET y POST, por lo que no es necesario tratar ambos métodos de manera diferente.
El siguiente es el código HTML relacionado:
<html> <body> <form method="POST" action="http://www.example.com/test.cgi"> First Name :<input type="text" name="FirstName" value="" /> <br /> Last Name :<input type="text" name="LastName" value="" /> <input type="submit" value="Submit Data" /> </form> </body> </html>
Crear formularios y HTML
CGI incluye una gran cantidad de métodos para crear HTML; cada etiqueta HTML tiene un método correspondiente. Antes de usar estos métodos, debe crear un objeto CGI mediante CGI.new.
Para que el anidamiento de etiquetas sea más sencillo, estos métodos reciben el contenido como un bloque de código, y el bloque devuelve una cadena que se usa como contenido de la etiqueta. Como se muestra a continuación:
#!/usr/bin/ruby
require "cgi"
cgi = CGI.new("html4")
cgi.out{
cgi.html{
cgi.head{ "\n"+cgi.title{"This Is a Test"} } +
cgi.body{ "\n"+
cgi.form{"\n"+
cgi.hr +
cgi.h1 { "A Form: " } + "\n"+
cgi.textarea("get_text") +"\n"+
cgi.br +
cgi.submit
}
}
}
}
Escape de cadenas
Cuando maneje parámetros en una URL o datos de formularios HTML, debe escapar ciertos caracteres especiales, como comillas (") y barras invertidas (\).
El objeto CGI de Ruby proporciona los métodos CGI.escape y CGI.unescape para manejar el escape de estos caracteres especiales:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
El resultado de ejecutar el código anterior es el siguiente:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Otro conjunto de ejemplos:
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
El resultado de ejecutar el código anterior es el siguiente:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Métodos comunes de la clase CGI
A continuación se muestran los métodos completos de la clase CGI en Ruby:
- Ruby CGI- Métodos relacionados con la biblioteca CGI estándar
Cookies y sesiones
- Ruby CGI Cookies- Cómo manejar cookies CGI.
- Ruby CGI Sessions- Cómo manejar sesiones CGI.