Instalar GIT, RVM, Ruby, Ruby on Rails y Passenger

Preparar un entorno de producción para hacer deploys de aplicaciones Ruby on Rails

En este artículo veremos cómo instalar todas las aplicaciones necesarias para montar un servidor en un entorno de producción para aplicaciones Ruby on Rails.

Instalar Git

Git es un sistema de control de versiones. Aunque sus posibilidades son muchas y altamente recomendado para utilizarlo en aplicaciones Ruby on Rails, en este manual sólo lo requerimos como dependecia para poder instalar RVM.

yum install git-core

Instalar RVM

Para instalar RVM podemos seguir el siguiente artículo: Ruby Version Manager (RVM)

Instalar Ruby 1.9.2

Ahora con RVM ya podemos instalar Ruby (tardará un poco). Instalaremos la versión 1.9.2, pero lo bueno de RVM es que más adelante puedes instalar cualquier versión.

rvm install 1.9.2 rvm install 1.8.7 ...

Para especificarle qué versión usar y ponerla por defecto:

rvm use 1.9.2 ruby -v rvm --default use 1.9.2

Instalar Ruby on Rails

Tan sólo hay que hacer:

gem install rails --no-ri --no-rdoc

¿Fácil, no?. El parámetro --no-ri y --no-rdoc sirve para no instalar la documentación. Al ser entorno de producción no la necesitamos.

A tener en cuenta que estamos instalando las gems en el gemset por defecto dentro de la versión en que nos encontramos. Podemos crear varios gemsets, e incluso exportarlos e importarlos.

rvm gemset list

Nos muestra los grupos de gems disponibles y el que estamos usando.

Instalar Passenger

Passenger es un módulo para Apache y Nginx para poder ejecutar las aplicaciones Rails. Es mucho más sencillo hacer deploys que antes cuando se utilizaban instancias de Mongrels.

gem install passenger --no-ri --no-rdoc

Ahora ejecutaremos el instalador de passenger para el servidor web Apache.

passenger-install-apache2-module

Es un assistente de instalación excepcionalmente completo y te guía sobre las dependencias y problemas que puede haber y como solucionarse. Con los paquetes instalados anteriormente apenas tendremos problemas.

Ejemplo de nuestra instalación:

\* GNU C++ compiler... found at /usr/bin/g++ \* Curl development headers with SSL support... found \* OpenSSL development headers... found \* Zlib development headers... found \* Ruby development headers... found \* OpenSSL support for Ruby... found \* RubyGems... found \* Rake... found at /usr/local/rvm/wrappers/ruby-1.9.2-p180/rake \* rack... found \* Apache 2... found at /usr/sbin/httpd \* Apache 2 development headers... not found \* Apache Portable Runtime (APR) development headers... not found \* Apache Portable Runtime Utility (APU) development headers... not found

En nuestro caso faltaban algunas dependencias, que el mismo manual nos dice cómo instalarlas, por ejemplo: (Fijaros bien en vuestro caso, ya que pueden variar)

yum install httpd-devel yum install apr-devel yum install apr-util-devel

Una vez instaladas se puede volver a llamar al assistente de instalación de Passenger

passenger-install-apache2-module

Finalmente, hay que abrir el archivo de configuración de apache httpd.conf y añadir estas líneas:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5/ext/apache2/mod_passenger.so PassengerRoot /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5 PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.2-p180/ruby

Reiniciamos Apache:

/etc/init.d/httpd restart

Realizar deploy

Ejemplo de cómo hacer un deploy (subir la web) a producción de una aplicación Ruby on Rails. Si tenemos la aplicacion en /applications/nuestra_aplicacion_rails, añadiremos un virtual host en el archivo de configuración de Apache (normalmente en /etc/httpd/conf/httpd.conf) parecido a este:

ServerName www.tudominio.com DocumentRoot /applications/nuestra_aplicacion_rails/public # Ruta de vuestra aplicación rails, aseguraos de apuntar a la carpeta 'public'! AllowOverride all Options -MultiViews

Configurar los Virtual Hosts de Plesk

Si no se utiliza plesk se puede obviar este paso. Con plesk la configuración del virtual host debemos ponerla en un archivo distinto (en vez de en el archivo de configuración de apache anterior). Normalmente se encuentra en:

vi /var/www/vhosts/tudominio.com/conf/vhosts.conf

Añadiendo:

ServerAlias \*.tudominio.com ServerName www.tudominio.com DocumentRoot /applications/nuestra_aplicacion_rails/public AllowOverride all Options -MultiViews

Y ejecutamos esto para que al regenerar la configuración del plesk se mantenga:

/opt/psa/admin/bin/websrvmng --reconfigure-vhost --vhost-name=tudominio.com -a -v

Probando una aplicación

Podemos hacer una aplicación de prueba antes de subir la definitiva:

mkdir /applications/
cd /applications
rails new nuestra_aplicacion_rails

Si todo ha funcionado accedemos a nuestro dominio y veremos la página inicial de una aplicación rails!

Problemas habituales

Uno de los problemas habituales tiene que ver con los permisos y los usuarios asignados a las carpetas. Habitualmente no se usa el usuario root en las carpetas de las aplicaciones. Una buena idea es usar el mismo usuario de apache o crear uno nuevo con permisos adecuados para poder escribir y leer en los directorios de las aplicaciones.