martes, noviembre 22, 2011

Vagrant en Windows o "como seguir unir dos mundos incongruentes"

Situación:
Nuestros diseñadores gráficos necesitan trabajar en el diseño de una aplicación que esta desarrollada en Ruby on Rails. Ellas utilizan los típicos programas de Adobe en la plataforma Windows.
Lo ideal es que ellos trabajen en los archivos de recursos y vean directamente los cambios reflejados con sólo recargar el navegador. 
El problema es que Windows es aún un poco hostil con RoR como para usarlo diariamente como entorno de desarrollo.

Una posible solución es la siguiente:

Correr la aplicación Rails en una máquina virtual con Ubuntu y trabajar con los fuentes a través de un directorio compartido entre el sistema anfitrión y el huesped.

Para esto voy a utilizar una herramienta llamada Vagrant, que es un front-end de VirtualBox.

Básicamente hay que instalar un par de programas, correr un par de comandos en una CMD (o línea de comandos) y editar un archivo de configuración.

Los pasos para instalar son (cuando vean líneas que comienzan con el carácter ">" es que deben ejecutarse en una CMD) :
  • Bajar e instalar JRuby (parece que en Windows 64bits Vagrant no anda con Ruby MRI). Si no tienes la Java RE, podes bajar la versión con la JRE incluida. También vamos a instalar un par de librerías que luego se van a necesitar.
> jgem install jruby-openssl jruby-win32ole
  • Bajar e instalar Virtual-Box
  • Instalar git. Nuestro proyecto utiliza este fantástico manejador de versiones para los fuentes.
  • Instalar Vagrant con el comando:
> jgem install vagrant

  • Descargar una imagen de Ubuntu Lucid 32bit y agregarla a las imágenes de Vagrant:
> vagrant box add base http://files.vagrantup.com/lucid32.box 
  • Descargamos los fuentes del proyecto
 > git clone {una_url_git_project.git}
  •  Agregamos Vagrant al proyecto:
> cd project_dir 
> vagrant init
  • Editar el archivo Vagrantfile que se acabó de crear. Nuestra aplicación utiliza el puerto HTTP 3000; si queremos acceder a la aplicación desde Windows, hay que hacer un "forwarding" por lo que agregamos esta línea:
config.vm.forward_port "http", 3000, 3000
  • Levantar la VM:
> vagrant up


Ya tenemos una VM con Linux corriendo. Para ingresar a la máquina virtual normalmente se usa SSH, pero en Windows el comando "vagrant ssh" no funciona.

Se puede solucionar utilizando un programa SSH como el putty. Mas detalles aquí. Dentro de la VM, nuestro proyecto quedo instalado en el directorio /vagrant. Ahí podemos ir e instalar gemas, correr bundler, levantar la aplicación, etc.

Ya con la VM funcionando los archivos del proyecto que editemos en Windows se van a ver reflejados en el directorio /vagrant del sistema huésped.

Espero que le sirva a alguien esta burda explicación. Vagrant es mucho mas que lo mostrado. No soy un adepto de usar máquinas virtuales, pero hay que admitir que es una valiosísima herramienta que nos puede servir en muchos escenarios.