Aplicaciones web Ruby - Programación CGI
Ruby es un lenguaje de uso general; no se puede llamar correctamente un lenguaje web en absoluto. Aun así, las aplicaciones web y las herramientas web en general se encuentran entre los usos más comunes de Ruby.
No solo puede escribir su propio servidor SMTP, demonio FTP o servidor web en Ruby, sino que también puede usar Ruby para tareas más habituales, como la programación CGI o como reemplazo de PHP.
Dedique unos minutos al tutorial de programación CGI para obtener más detalles sobre la programación CGI.
Escribir guiones CGI
El script CGI de Ruby más básico se ve así:
#!/usr/bin/ruby
puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"
Si llama a este script test.cgi y lo carga en un proveedor de alojamiento web basado en Unix con los permisos adecuados, puede usarlo como script CGI.
Por ejemplo, si tiene el sitio web https://www.example.com/alojado con un proveedor de alojamiento web Linux y sube test.cgi al directorio principal y le otorga permisos de ejecución, luego visitahttps://www.example.com/test.cgi debería devolver una página HTML que diga This is a test.
Aquí, cuando se solicita test.cgi desde un navegador web, el servidor web busca test.cgi en el sitio web y luego lo ejecuta utilizando el intérprete de Ruby. El script Ruby devuelve un encabezado HTTP básico y luego devuelve un documento HTML básico.
Usando cgi.rb
Ruby viene con una biblioteca especial llamada cgi que permite interacciones más sofisticadas que aquellas con el script CGI anterior.
Creemos un script CGI básico que use cgi -
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
puts cgi.header
puts "<html><body>This is a test</body></html>"
Aquí, creó un objeto CGI y lo usó para imprimir la línea de encabezado por usted.
Procesamiento de formularios
El uso de la clase CGI le da acceso a los parámetros de consulta HTML de dos formas. Supongamos que nos dan una URL de /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.
Puede acceder a los parámetros Nombre y Apellido usando CGI # [] directamente de la siguiente manera:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['FirstName'] # => ["Zara"]
cgi['LastName'] # => ["Ali"]
Hay otra forma de acceder a estas variables de formulario. Este código le dará un hash de todas las claves y valores:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
A continuación se muestra el código para recuperar todas las claves:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi.keys # => ["FirstName", "LastName"]
Si un formulario contiene varios campos con el mismo nombre, los valores correspondientes se devolverán al script como una matriz. El descriptor de acceso [] devuelve solo el primero de estos. Indexa el resultado del método params para obtenerlos todos.
En este ejemplo, suponga que el formulario tiene tres campos llamados "nombre" e ingresamos tres nombres "Zara", "Huma" y "Nuha" -
#!/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"]}
Note- Ruby se encargará de los métodos GET y POST automáticamente. No existe un tratamiento separado para estos dos métodos diferentes.
Un formulario asociado, pero básico, que podría enviar los datos correctos tendría el código HTML así:
<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>
Creación de formularios y HTML
CGI contiene una gran cantidad de métodos utilizados para crear HTML. Encontrará un método por etiqueta. Para habilitar estos métodos, debe crear un objeto CGI llamando a CGI.new.
Para facilitar el anidamiento de etiquetas, estos métodos toman su contenido como bloques de código. Los bloques de código deben devolver una cadena , que se utilizará como contenido de la etiqueta. Por ejemplo
#!/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
}
}
}
}
NOTE- El método de formulario de la clase CGI puede aceptar un parámetro de método, que establecerá el método HTTP (GET, POST, etc.) que se utilizará en el envío del formulario. El valor predeterminado, utilizado en este ejemplo, es POST.
Esto producirá el siguiente resultado:
Content-Type: text/html
Content-Length: 302
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<HTML>
<HEAD>
<TITLE>This Is a Test</TITLE>
</HEAD>
<BODY>
<FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
<HR>
<H1>A Form: </H1>
<TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
<BR>
<INPUT TYPE = "submit">
</FORM>
</BODY>
</HTML>
Citar cadenas
Cuando se trata de URL y código HTML, debe tener cuidado de citar ciertos caracteres. Por ejemplo, un carácter de barra (/) tiene un significado especial en una URL, por lo que debe serescaped si no forma parte del nombre de la ruta.
Por ejemplo, cualquier / en la parte de consulta de la URL se traducirá a la cadena% 2F y deberá volver a traducirse a / para que pueda utilizarlo. El espacio y el ampersand también son caracteres especiales. Para manejar esto, CGI proporciona las rutinasCGI.escape y CGI.unescape.
#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Esto producirá el siguiente resultado:
Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
Esto producirá el siguiente resultado:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Métodos útiles en la clase CGI
Aquí está la lista de métodos relacionados con la clase CGI:
Los rubíes CGI - Métodos relacionados con la biblioteca estándar CGI.
Cookies y sesiones
Hemos explicado estos dos conceptos en diferentes secciones. Siga las secciones:
Las cookies CGI de Ruby : cómo manejar las cookies CGI.
The Ruby CGI Sessions : cómo administrar sesiones CGI.
Servidores de alojamiento web
Puede consultar el siguiente tema en Internet para alojar su sitio web en un servidor basado en Unix:
Alojamiento web basado en Unix