Rafa Pérez comparte con nosotros su receta para preparar un VPS para empezar a desarrollar y probar Ruby. Su guia esta basada en el entorno de Fedora 15, usa Ruby Version Manager, Ruby 1.9.3 y PostgreSQL

Preparar un VPS con Fedora 15 como entorno de desarrollo de Ruby con PostgreSQL, git y RVM

Comencemos con la guia, lo primero es entrar por SSH al servidor y cambiar la clave del usuario root:

ssh root@0.0.0.0 passwd

Lo proximo es crear un usuario con el que accederemos el VPS a diario:

useradd tu_nuevo_usuario_aqui passwd tu_nuevo_usuario_aqui tu_password_complejo_aqui

Cambiar el puerto del sshd (si el hosting lo permite) y no permitir logging del root por ssh:

vim /etc/ssh/sshd_config
Port 2877 PermitRootLogin no

Donde 2877 es el puerto donde queremos que el servicio de SSH comience a escuchar.

Revisar las actualizaciones del sistema y de ser necesario instalarlas:

yum check-update yum update

A continuación instalamos mi editor de texto favorito vim:

yum install vim

Instalar git:

yum install git

Instalar RVM y vemos los paquetes requeridos:

curl -L get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm requirements

Ahora instalamos los paquetes requeridos por RVM:

yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

Continuamos con la instalación de ruby:

rvm install 1.9.3

Instalar postgresql:

yum install postgresql-contrib.x86_64  postgresql.x86_64 postgresql-server.x86_64

Iniciar la base de datos:

service postgresql initdb

Modificar acceso de usuarios:

vim /var/lib/pgsql/data/pg_hba.conf

Cambiar el ident por md5 dejando las opciones default para que simplemente corra sin acceso remoto en el servidor. Cualquier duda o pregunta pueden consultarla con el autor: Rafa Pérez.

Recuerda, si quieres compartir algun articulo, solo envialo en los comentarios de Contacto.

Cada vez que voy a instalar una gema con el comando gem uso los parámetros --no-rdoc y --no-ri para que no me genere la documentación, principalmente porque nunca la uso y además demora demasiado el tiempo de instalación de las gemas. Pero escribir esos parámetros cada vez que ejecuto el comando es fastidioso.

Afortunadamente gem busca el archivo de configuración ~/.gemrc en el directorio personal del usuario y aplica las opciones que estén definidas, así que creando ese archivo en nuestro home con la siguiente línea no tendremos que tipear las opciones nunca más:

gem: --no-rdoc --no-ri
Si usualmente utilizas la consola interactiva de Ruby On Rails para realizar pruebas, correr tareas de Rake, entre otras cosas y te resultaría sumamente útil ver el log de lo que esta haciendo el ActiveRecord, entonces este tip es para ti.

Simplemente ejecuta la consola desde la carpeta raíz de tu aplicación Rails:

Para rails 3.x:
$ rails c
Para rails 2.x:
$ script/console
Y luego indícale al logger que use la salida estándar:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Con eso los mensajes de log del ActiveRecord se imprimirán en la consola.
RVM (Ruby Version Manager) es una fantástica herramienta que te permite gestionar muchas versiones de Ruby (y de sus gemas) en un mismo equipo. Las gemas se manejan mediante contenedores (gemsets), allí puedes instalar lo que desees sin afectar el resto de los componentes. Es un principio muy parecido al de las máquinas virtuales.

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-dev

Luego, 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_profile

Hacemos un:

$ source ~/.bash_profile

Y verificamos que todo haya salido bien:

$ type rvm | head -1

El 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 readline


Instalamos una versión de Ruby (por ejemplo: 1.8.7):

$ rvm install 1.8.7

Y 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-p334


Ahora 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 pruebas1


Ahora 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 installed


Particularmente 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@pruebas2

Y 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