El propósito de este post es presentar la receta oficial que utilizamos en (in)signia para encarar el setup de nuestro ambiente de trabajo.
Es muy importante resaltar que nuestro entorno de trabajo se encuentra basado en Linux (prometemos en breve dedicar un post completo a las razones/motivos que nos llevaron a inclinarnos por Linux como plataforma de trabajo). La distribución que elegimos es Ubuntu en su versión 9.04, básicamente por su popularidad y crecimiento.
El primer tema que tenemos que encarar al empezar el setup de nuestro entorno de trabajo es la instalación de Ruby. La forma tradicional de instalar esto en linux sería con el siguiente comando:
sudo apt-get install ruby
Esto funciona pero nos acarrea un problema serio debido a que apt-get (debido a los repositorios de Ubuntu) nos instalará la versión 1.8.7 de Ruby. Versión que ha resultado ser bastante conflictiva en lo que respecta a compatibilidad con las gemas más utilizadas.
La solución a este problema es ir por el camino más seguro y compilar directamente la versión 1.8.6 de Ruby. Para ello, estos son los pasos a seguir:
sudo apt-get -y install build-essential libssl-dev libreadline5-dev zlib1g-dev wget http://rubyforge.org/frs/download.php/45875/ruby-1.8.6-p287.tar.gz tar xzf ruby-1.8.6-p287.tar.gz && cd ruby-1.8.6-p287 ./configure --prefix=/usr/local --with-openssl-dir=/usr --with-readline-dir=/usr --with-zlib-dir=/usr make sudo make install
Existen patch levels más nuevos (el 369 para ser exactos) pero hemos tenido serios problemas de compatibilidad con capistrano, una gema cuyo funcionamiento es indispensable.
Una vez completada la instalación de Ruby, el paso a seguir es instalar rubygems. Para esto tendremos que seguir los siguientes pasos:
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz tar xvzf rubygems-1.3.5.tgz && cd rubygems-1.3.5 sudo ruby setup.rb
En este punto, podemos instalar las gemas básicas para trabajar con una aplicación Rails. Para esto, simplemente corremos:
sudo gem install rails mongrel capistrano
A continuación tenemos que seguir por la instalación de los motores de base de datos y sus repectivos adapters para Ruby. Nosotros manejamos dos motores: MySQL y SQLite3.
Empecemos por el mas liviano… Para instalar SQLite3, tenemos que seguir estos pasos:
sudo apt-get install sqlite3 libsqlite3-dev sudo gem install sqlite3-ruby
Los pasos para instalar MySQL son muy parecidos (aunque es necesario instalar más paquetes):
sudo aptitude install mysql-server mysql-client libmysql-ruby1.8 libmysqlclient-dev sudo gem install mysql
Hasta aquí, estaríamos en condiciones de realizar la siguiente prueba:
rails prueba && cd prueba ruby script/generate scaffold Persona nombre:string apellido:string rake db:migrate ruby script/server
Luego intentamos ingresar con un browser a http://localhost:3000/personas. Debería funcionar.
Aunque en este punto nuestro entorno de trabajo posee un corazón que late bien fuerte; nos falta una pieza sumamente importante: un framework para testing. En (in)signia estamos muy familiarizados con el Behavior Driven Development, por lo que en nuestros proyectos utilizamos Rspec y Cucumber. Para instalarlos necesitamos los siguientes pasos:
sudo apt-get install libxml2 libxml2-dev libxslt1-dev sudo gem install rspec rspec-rails cucumber webrat nokogiri
Las dependencias que instalamos son requeridas por la gema nokogiri.
Resta instalar un buen sistema de control de versiones, actualmente el código fuente de todos nuestros proyectos se encuentra administrado con Git. Su instalación es relativamente sencilla, basta con ejecutar:
sudo apt-get install git-core gitk
Con esto instalamos todos los comandos de Git, su aplicación GUI (muy util cuando las papas queman) y el autocompletion para la consola.
Sin embargo, en (in)signia procuramos trabajar con las últimas versiones disponibles del software que utilizamos diariamente. Por lo que, luego de la instalación básica, normalmente hacemos:
wget http://kernel.org/pub/software/scm/git/git-1.6.4.tar.gz tar xzvf git-1.6.4.tar.gz && cd git-1.6.4 ./configure make sudo make install
A esto le agregamos un buen .gitconfig, como este:
[alias] up = pull --rebase origin br = branch st = status ci = commit co = checkout ql = log --abbrev-commit --pretty=oneline qlr = log --reverse --abbrev-commit --pretty=oneline pending = log --reverse --abbrev-commit --pretty=oneline master --cherry-pick master... undo = reset --soft HEAD^ pick = cherry-pick [push] default = matching
Y mejoramos nuestro prompt, agregando las siguientes lineas en nuestro .bashrc:
function parse_git_dirty { [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*" } function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/" } export PS1='\u@\h \[\033[1;33m\]\w\[\033[0m\]$(parse_git_branch)$ ' alias ack='ack-grep'
Y listo! Ya tenemos un entorno de trabajo bien sólido para encarar las exigencias de nuestro trabajo de la mejor manera.