La receta es para Debian pero se puede aplicar para cualquier distro, solo hay que tener en cuenta los nombres de los paquetes a instalar.
Comencemos entonces con las dependencias. Necesitamos git, las herramientas básicas para compilar, los fuentes del readline y del ssl:
# aptitude install libreadline5-dev git curl build-essential libssl-devLuego, como usuario ejecutamos el siguiente script:
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)Ese script descarga rvm de git, lo compila y lo instala. Antes de usarlo debemos agregar una línea a nuestro .bash_profile, para eso ejecutamos:
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profileHacemos un:
$ source ~/.bash_profileY verificamos que todo haya salido bien:
$ type rvm | head -1El resultado de ese comando debería ser: rvm es una función. Si no obtenemos ese resultado algo ha ido mal. Les recomiendo entonces revisar la documentación de instalación o la página de problemas solucionados.
Ahora podemos ejecutar rvm como un comando más de consola. Instalemos un par de paquetes que nos harán falta antes de instalar una versión de Ruby:
$ rvm package install openssl
$ rvm package install readlineInstalamos una versión de Ruby (por ejemplo: 1.8.7):
$ rvm install 1.8.7Y configuramos la versión que deseamos usar por defecto en el sistema:
$ rvm use 1.8.7 --default
Using /home/tu_usuario/.rvm/gems/ruby-1.8.7-p334Ahora podemos crear gemsets a placer, por ejemplo:
$ rvm gemset create pruebas1
'pruebas1' gemset created (/home/tu_usuario/.rvm/gems/ruby-1.8.7-p334@pruebas1).Notese que el @ en el mensaje anterior nos indica que el gemset ha sido asociado a la versión 1.8.7 de Ruby que habíamos instalado (y seleccionado para usar) previamente. Ahora instalemos otro gemset de pruebas para entender la magia del asunto.
$ rvm gemset create pruebas2
'pruebas2' gemset created (/home/tu_usuario/.rvm/gems/ruby-1.8.7-p334@pruebas2).Podemos movernos a través de los gemsets usando el comando use con la siguiente forma:
$ rvm use 1.8.7@pruebas1
Using /home/tu_usuario/.rvm/gems/ruby-1.8.7-p334 with gemset pruebas1Ahora probemos instalar una gema en el contenedor 'pruebas1':
$ gem install xml-simple --no-rdoc --no-ri
Fetching: xml-simple-1.0.15.gem (100%)
Successfully installed xml-simple-1.0.15
1 gem installedParticularmente uso los argumentos --no-rdoc --no-ri para evitar la instalación de la documentación y otros archivos adicionales que no utilizo y demoran considerablemente la puesta a punto de la gema.
Veamos entonces qué tenemos ahora en 'pruebas1':
$ gem list --local
*** LOCAL GEMS ***
rake (0.8.7)
xml-simple (1.0.15)Una nueva gema instalada en nuestro gemset. Y en 'pruebas2' ¿qué tenemos?:
$ rvm use 1.8.7@pruebas2
Using /home/tu_usuario/.rvm/gems/ruby-1.8.7-p334 with gemset pruebas2
$ gem list --local
*** LOCAL GEMS ***
rake (0.8.7)¡Oh! No tenemos nada instalado. Eso quiere decir que nuestros contenedores están aislados uno del otro y que podemos instalar cosas que cada uno de ellos sin temor a romper algo en el otro (siempre teniendo cuidado del gemset que está en uso).
Si en algún momento dañamos un gemset basta con ejecutar:
$ rvm gemset delete pruebas1
WARN: Are you SURE you wish to remove the entire gemset directory 'pruebas1' (/home/tu_usuario/.rvm/gems/ruby-1.8.7-p334@pruebas1)?
(anything other than 'yes' will cancel) > Respondemos yes y listo, desaparece el gemset con todo lo que tenía adentro.
Muy bonito todo, pero se preguntarán ¿Cómo le digo a un determinado proyecto que use un gemset específico? ¿O es que debo especificarle manualmente que gemset utilizará cada vez que vaya a ejecutarlo?
Pues la respuesta es muy simple, basta con crear un archivo .rvmrc en la raíz del proyecto con algo parecido a esto:
rvm use 1.8.7@pruebas2Y desde ese momento, todo lo que está dentro de esa carpeta usará la versión del Ruby y el gemset especificado en el archivo.
NOTA: Es importante aclarar que Ruby, RubyGems, las gemas o cualquier otras cosa relacionada NO debe instalarse usando la paquetería de la distribución. TODO debe manejarse a través RVM, de lo contrario corromperemos toda la instalación.
Espero que esta receta les sea de utilidad, a mi me ha cambiado la vida xD












