lunes, noviembre 24, 2008

Instalando Ruby on rails a la Mac en Windows

Por cuestiones de un proyecto en el que estoy trabajando, estamos utilizando Ruby on Rails como la herramienta para el desarrollo web. En el equipo de desarrollo hay gente que utiliza OSX y Windows como sistemas operativos.

Primeramente se instalo y se creo el esqueleto del proyecto en OSX, usando como editor del código fuente el excelente editor TextMate. posteriormente cuando los desarrolladores de Windows les toco hacer su parte, la pregunta que surgió, fue iban ellos a editar el código fuente de RoR.

Siendo que los desarrolladores de Windows estaban mas acostumbrados a IDEs, se busco una IDE con la que pudieran trabajar. De entre las opciones se eligió Aptana y su plugin RadRails, el cual se veía muy bien como entorno de desarrollo, por el gran soporte ofrecido para RoR.

Hasta aquí todo parecía que iba por buen camino, pero los desarrolladores se comenzaron a quejar de que Aptana tardaba mucho tiempo para iniciar, que después de estarse ejecutando por tiempos prolongados, la maquina empezaba a "alentarse".

Por otra parte cuando discutíamos cuestiones del código y yo usaba TextMate, solo con una serie de comandos (atajos de teclas) de teclado y ellos para realizar la misma acción en Aptana tenían que hacer uso del mouse y escribir instrucciones para obtener el mismo resultado, surgió la inquietud de tener una herramienta como TextMate en Windows.

Buscando encontramos e-TextEditor, el cual es un editor de código fuente modelado a partir de TextMate, es tan cercano su parecido que inclusive "Bundles" (Extensibilidad mediante comandos y fragmentos de código) de TextMate en su mayoría son compatibles con e-TextEditor. Esto es precisamente lo que buscábamos; ya que nos permitiría a todos trabajar de manera muy similar aunque algunos estemos en OSX y otros en Windows.

El único detalle con e-TextEditor, es que necesita soporte en Linux en Windows para poder trabajar de manera optima con RoR y hacer uso de los bundles de TextMate disponibles para RoR, pero con las instrucciones que voy a mostrar a continuación, podrán tener un ambiente de desarrollo para RoR muy parecido a trabajar con RoR en OSX.

Nota: Antes de proceder con las instrucciones aquí mencionadas si se tiene instalado Ruby, RubyGems y/o Rails a partir de un instalador para Windows, es necesario des-instalarlo y ademas eliminar la carpeta C:\ruby

Instalando ambiente Linux en Windows
Primeramente hay que instalar Cygwin, el cual es un ambiente parecido a Linux para Windows, de hecho provee una capa de emulación que permite a herramientas de Linux trabajar en Windows.

Para instalarlo, hay que dirigirnos al sitio http://cygwin.com/ y descargar el instalador, una vez descargado, lo ejecutamos y el asistente de instalación nos pedirá que le indiquemos donde se va instalar Cygwin, de que repositorio se va a descargar Cygwin y finalmente nos pedirá que paquetes deseamos instalar, las opciones por omisión están bien, en los paquetes a instalar ahí es donde nos detendremos un momento.

De la opción de paquetes hay que instalar:
  • Ruby
  • Make
  • sqlite3
  • libsqlite*
  • gcc
  • gcc+
  • gcc4
  • gcc4++
  • git
  • automake
  • autogen

Todos esos paquetes están distribuidos en las categorías: Interpreters, Databases y Devel. Algunos de ellos al seleccionarlos, seleccionaran automáticamente otros paquetes dependientes; la instalación va a tomar unos minutos ya que los paquetes se descargan primero de Internet.

Cygwin
Uploaded with plasq's Skitch!


Si todo salio bien tendremos un icono como el que se muestra en el escritorio, ademas de que si, lo ejecutamos, nos va a abrir una ventana de MS-DOS, solo que en interprete en lugar de ser MS-DOS de Windows, va a ser el Bash de Linux.

Bash
Uploaded with plasq's Skitch!


El programa de consola de Windows tiene muchas carencias, por tal motivo vamos a reemplazarlo por otro programa, que soporte múltiples ventanas, múltiples interpretes, background transparentes entre otras cosas, este programa se llama Console, hay que descargar la versión mas reciente disponible (Console 2.00 Beta, build 141).

Console
Uploaded with plasq's Skitch!


Una ves descargado, lo descomprimimos en el directorio de nuestra preferencia y ejecutamos el programa Console.exe, de preferencia creamos un acceso directo a nuestro escritorio o quicklaunch bar. Para configurar que Cygwin se ejecute dentro de Console, nos dirigimos al menú Edit > Settings y en la ventana de configuración nos dirigimos a la opción de Tabs, hacemos "click" en el botón de "Add" y en el "Textbox" llamado "Shell" introducimos la siguiente linea, siempre y cuando Cygwin se haya instalado en c:\cygwin:

C:\cygwin\bin\bash --login -i

Le ponemos un titulo para ese interprete y con el botón de "Move up" movemos nuestro nuevo "Tab" al principio, para que así cada vez que ejecutemos Console, automáticamente se abra con el interprete de "Bash". Un paso recomendable en la configuración de Console, es cambiar la tipografía, esto lo podemos hacer en "Apparence" en mi caso elegí Consolas de 14pt.

Console-config
Uploaded with plasq's Skitch!


Instalando el ambiente Ruby on Rails
Hay que descargar RubyGems, de preferencia la versión 1.3.1 del archivo en formato tgz, una vez descargado, lo copiamos al directorio c:\cygwin\tmp, y desde Console ejecutando en interprete "Bash" los descomprimimos e instalamos con los siguientes comandos:

cd /tmp
tar xzvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb


Despues de un momento gems debio de quedar instalado, ahora podemos proceder a instalar Rails y eso lo hacemos de la siguiente forma, desde Console:

gem install rails --include-dependencies

Ahora podemos continuar instalando otros gems que utilicemos en el desarrollo en Rails, por ejemplo podemos instalar soporte para SQLite3, de la siguiente forma:

gem install sqlite3-ruby

De igual forma podemos instalara cucumber, rspec o tras mas:

gem install rspec rspec-rails cucumber webrat
gem install term-ansicolor treetop diff-lcs hpricot
gem install thoughtbot-shoulda --source=http://gems.github.com
gem install thoughtbot-factory_girl --source=http://gems.github.com


Para instalar soporte para MySQL, es necesario compilar MySQL con soporte para Cygwin y eso lo vamos a hacer en la siguiente sección.

Instalando soporte MySQL para Cygwin
Suponiendo que MySQL es el servidor de base de datos con el que vamos a trabajar en Rails y que actualmente esta instalado en Windows, debemos prepararlo para poderlo utilizar en Rails desde Cygwin.

Por tal motivo descargamos el codigo fuente de MySQL que corresponda con la versión binaria que tenemos instalada en Windows; en mi caso este archivo corresponde con la versión MySQL 5.0.67, el codigo fuente lo podemos descargar de aqui.

Una vez descargado, copiamos el archivo al directorio c:\cygwin\tmp, y desde Console, procedemos a descomprimirlo, compilarlo e instalarlo así:

cd /tmp
tar xzvf mysql-5.0.67.tar.gz
cd mysql-5.0.67
./configure
make install


Durante este paso hay que buscar en que entretenerse ya que tarda bastente tiempo...

Cuando la instalación haya terminado, nuestro siguiente paso es instalar el soporte de MySQL en Rails, para tal efecto desde Console ejecutamos:

gem install mysql

Probando Rails
Para verificar que Rails quedo instalado correctamente en Cygwin, en Console ejecutamos las siguientes instrucciones para crear una nueva aplicación Rails usando MySQL:

cd
mkdir Proyectos
cd Proyectos
rails -d mysql SampleApp


Una vez creado el esqueleto de la aplicación, es necesario modificar el archivo database.yml, primeramente para indicarle la clave del usuario root de MySQL y posteriormente para indicar el servidor MySQL al que nos vamos a conectar.

Para editar el archivo database.yml podemos usar el Notepad de Windows, pero Notepad no se lleva bien con los archivos Linux; por tal motivo vamos a usar el programa Notepad2, para editar el archivo lo encontramos en la ruta c:\cygwin\Home\[usuario]\Projects\SampleApp\config\database.yml

Primero hay que poner la clave correspondiente para el usuario root de MySQL, después hay que modificar el valor del host, hay que reemplazar "localhost" por 127.0.0.1, ya que localhost aquí, va a provocar que Rails no encuentre el servidor.

database.yml
Uploaded with plasq's Skitch!


Después de guardar los cambios, regresamos a Console, con las siguientes acciones crearemos las bases de datos en MySQL, crearemos un Modelo, Controlador y Vistas usando el generador Scaffold:

cd
cd Proyectos/SampleApp
rake db:create
script/generate scaffold Post title:string body:string
rake db:migrate


Ahora vamos a ejecutar el servidor Web desde Console:

script/server

Si apuntamos nuestro navegador a la dirección http://localhost:3000 debemos de recibir la pagina de bienvenida de Rails y si navegamos a http://localhost:3000/posts, podremos ver parte de nuestra aplicación generada a partir del modelo Post.

Rails welcome
Uploaded with plasq's Skitch!



Rails app
Uploaded with plasq's Skitch!


eTextEditor
Ya que comprobamos que Rails esta funcionando en Cygwin y que nuestra instalación de MySQL también funciona, ahora procedemos a instalar el editor eTextEditor, que a fin de cuentas es el motivo por el cual estamos realizando estas acciones.

Hay que descargar el eTextEditor de su sitio web, la licencia la podemos comprar en linea o podemos continuar con los 30 días de evaluación. Una vez instalado, lo ejecutamos desde Console simplemente con teclear (Nota: Si ya tenemos Console abierto, es necesario cerrarlo y volverlo a abrir):

e

Al iniciar nos indicara que necesita actualizar unos paquetes de Cygwin, elegimos la forma automática, después de un momento el edito estar listo para usarse. Lo que sigue en este punto es instalar/actualizar algunos bundles que nos harán la vida mas fácil en Rails. Primeramente vamos al menú Bundles > Edit Bundles > Manage Bundles, a continuación nos presentara una ventana con un listado de bundles disponibles para instalarse o para actualizarse.

Mi recomendación es actualizar instalar los siguientes bundles:
  • Bundle Development
  • JavaScript JQuery
  • JavaScript Prototype & Scrip_aculo_us
  • Ruby on Rails
  • Ruby RSpec
  • Ruby Shoulda
  • Ruby
  • TextMate

Bundles
Uploaded with plasq's Skitch!


A parte de los bundles que nos muestra esta pantalla, podemos instalar algunos bundles adicionales a través de Console, por ejemplo vamos a instalar el bundle para Git (Sistema de Control de Versiones) y el bundle para Cucumber, por lo tanto en Console tecleamos las siguientes instrucciones:

cd /cygdrive/c/Users/[usuario]\ Data/e
mkdir Bundles
cd Bundles
git clone git://gitorious.org/git-tmbundle/mainline.git Git.tmbundle
git clone git://github.com/bmabey/cucumber-tmbundle.git Cucumber.tmbundle


Una vez que termine, en la pantalla del eTextEditor seleccionamos el menú Bundles -> Bundle Editor -> Reload Bundles, después de esto los bundles recién instalados aparecerán en le menú Bundles, mostrandonos las acciones, comandos y fragmentos de código que cada bundle provee.

Ahora para editar nuestra aplicación Rails, hay que cerrar el eTextEditor, en la pantalla de Console nos dirigimos al directorio de nuestro proyecto:

cd
cd Proyectos/SampleApp
e .


El comando e . nos abrirá la pantalla del eTextEditor con nuestro proyecto cargado, como paso adicional podemos cambiar los colores del editor por unos mas "ruby- ish", para esto vamos al menú Edit > Edit Theme y de la lista de temas elegimos "Vibrant Ink" adicionalmente podemos cambiar la tipografía a Consolas.

Ahora para ver como funciona el bundle de Ruby on Rails vamos a ejecutar las pruebas de unidad en nuestro modelo Post, a través de la consola la forma de hacer esto es: rake test:unists, pero con el bundle en eTextEditor vamos al menú Bundles > Ruby on Rails > Run Tests > Test Units y despues de un momento obtendremos el resultado de nuestras pruebas de unidad.

eTextEditor-RoR
Uploaded with plasq's Skitch!


Las opciones que nos brindan los bundles generalmente tienes una combinación de teclas de acceso o palabras que al complementarlas con un "Tab" realizar cierta acción, por loo tanto recordar estos accesos rápidos a las acciones mas comunes son de gran ayuda para evitar usar el mouse y navegar a través de los menús.

BundleKeys
Uploaded with plasq's Skitch!


Conclusión
Ruby y Ruby on Rails tienen como concepto la simplicidad para realizar nuestro trabajo, por lo tanto las herramientas que usemos deben de seguir esa linea de simplicidad y no causarnos dolores de cabeza (Lentitud en el sistema, alto consumo de recursos) mientras desarrollamos nuestra "Killer Application", si bien TextMate y eTextEditor no son gratis, su costo es bastante moderado y accesible.

En el ambiente Linux también hay opciones para el desarrollo en Ruby on Rails, pero eso de momento es otra historia para otro post.

No hay comentarios.: