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.
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
Para instalar RVM podemos seguir el siguiente artículo: Ruby Version Manager (RVM)
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
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.
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
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
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
Podemos hacer una aplicación de prueba antes de subir la definitiva:
mkdir /applications/cd /applicationsrails new nuestra_aplicacion_rails
Si todo ha funcionado accedemos a nuestro dominio y veremos la página inicial de una aplicación rails!
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.