RubyOnRails en Dreamhost

En el Taller de Ruby On Rails del Hacklab Cielito Lindo, se planteó la pregunta del millón:

¿Dónde alojar aplicaciones Rails?

De los 3 hostings que se mencionaron (TextDrive, Ferca y Dreamhost), uno de ellos resulta ser mi favorito: Dreamhost.

Aprovechando que en mi lista ‘B’ de tareas pendientes tenía lo de montar Rails en alguna parte, aquí va el proceso documentado por si a alguien le sirve.

Requisitos previos

  • Tener un dominio registrado en Dreamhost (parece una obviedad, pero ya veréis que no).
  • Tener habilitado el acceso mediante Telnet (mal) o SSH (bien) a nuestro servidor.
  • Un mínimo de habilidad con la línea de comandos.

Habilitando el espacio web

Se puede hacer de mil maneras, pero lo más cómodo es usar un subdominio de tu site (es por ello que comentaba que necesitas un site funcionando)

Para dar de alta un subdominio (que a día de hoy es gratis total en Dreamhost), nos vamos al panel de control > Domains > Manage Domains y le damos a “[Add New Domain / Sub-Domain]“

Ponemos los datos del subdominio, prestando especial a estos detalles:

  • Elegir “Fully Hosted” (para que nos cree un directorio nuevo para el site)
  • Habilitar FastCGI

Le damos a OK, esperamos un ratillo (10-15 minutos) y accedemos vía Telnet o SSH a nuestro servidor. Si vemos una carpeta en nuestra home llamada ‘rails.tudominio.com’ (o como sea que le hayas puesto a tu subdominio) ya podemos crear nuestra primera aplicación en Rails.

Prepárate, porque lo que viene ahora es bastante duro:

Y ya está… complicado, ¿eh?

Si ahora abres un navegador y te vas a http://rails.tudominio.com/nombredeaplicacion/public/ (ojo con la / final, sin ella a mí no me rula) verás una bonita pantalla de bienvenida:

Si es así, y todo funciona correctamente, es el momento de fortificar la instalación de Rails: si la dejas como está, cualquiera puede ir a la carpeta /blog/config/ y leer el nombre de usuario y contraseña de database.yml.

Para asegurarnos de que eso no ocurra (y para tener una URL un poco más breve, de paso) volvemos al panel de control de Dreamhost, en Domains > Manage Domains y le damos a “Edit” en nuestro flamante subdominio. Ahora cambiaremos la ruta del site (“Web Directory”) por rails.tudominio.com/nombredeaplicacion/public/

Guardamos los cambios, y tras un tiempo prudencial (en mi caso, unos 20 segundos : ) abrimos la URL http://rails.tudominio.com comprobando que, efectivamente, Rails nos muestra la misma pantalla de antes.

Si es así, bienvenido al maravilloso mundo de Ruby On Rails!… :D

Update: Si quieres contratar un alojamiento en DreamHost (que es algo que recomiendo encarecidamente después de comprobar que se tarda menos en montar Rails allí que en mi ordenador), puedes usar este código de promo: SNROR, y te descontarán 20 pavos de tu factura por la cara…

Efecto :hover sobre cualquier cosa, v2.0

En respuesta a un comentario en el post sobre “Efecto :hover en cualquier cosa”, me puse a jugar con prototype.js para ver si se podía hacer lo mismo de una forma menos farragosa.

El resultado:

function setHover(className,hoverClassName) {
    var hoverDivs = document.getElementsByClassName(className);
    hoverDivs = $A(hoverDivs);
    hoverDivs.each(
        function(div){
            div.onmouseover = function(){
                Element.addClassName(this,hoverClassName);
            }
            div.onmouseout = function(){
                Element.removeClassName(this,hoverClassName);
            }
        }
    );
    }
function init (){
    setHover('hover','hoverclass');
}
Event.observe(window, 'load', init, false);

La idea es que a todos los elementos que queramos hacerles un hover les asignamos la clase “hover”, y definimos en otra clase “hoverclass” los atributos del estado hover.

A pesar de que en el código se usa una variable llamada ‘div’, funciona con cualquier elemento de la página…

Lo que hacemos, igual que con el método anterior, es buscar elementos que contengan la clase ‘hover’, y les asignamos la clase ‘hoverclass’ en el evento ‘onmouseover’.

Más cosillas…

Event.observe()
es la forma inteligente de asignar una función a un evento sin “manchar” el HTML de la página. En este caso le asigno la función ‘init()’, que se encarga de llamar a ‘setHover()’ con los dos parámetros que necesita (el class que he usado para definir qué elementos tienen hover, y el class que quiero usar cuando se hace rollover).

Gracias a tutiplén a demimismo por sugerir el uso de prototype.js. Creo que estoy enamorado de otra librería :D

CamoBuilder™

Movido por el éxito en Google del mini-post sobre “El Arte del Camuflaje” (y por una malsana obsesión por el arte generativo, la programación y el automatismo), acabo de poner online una pequeña aplicación para generar patrones de “camuflaje” (entendido esto en el más amplio sentido de la palabra): CamoBuilder™

CamoBuilder v0.2

Se admiten todo tipo de sugerencias para mejoras. Algunas que ya están en la lista de tareas:

  • Exportar como PDF
  • Personalizar colores y tamaño
  • Usar tus propias formas como patrón
  • Mejorar la velocidad
  • Que parezca camuflaje, en vez de un estampado textil de industria china ilegal…