Ruby on Rails con Passenger (y Mongrel) en servidor cPanel

Si estamos leyendo esto es porque hemos optado por instalar Ruby en nuestro sistema cPanel de la manera antigua y contando con versiones de Ruby no actualizadas.

cPanel presenta una herramienta para su instalación de manera sencilla. Lo primero que tenemos que saber es que cPanel por defecto no soporta Rails 3.0.0 en el sentido que no podrá ser gestionado desde el WHM (en el momento de realizar esta guía). Esta opción, debido a lo obsoleto de las versiones instaladas por la propia herramienta de cPanel está totalmente desaconsejada.

Pero la elección final es nuestra! Y si queremos las versiones compatibles con WHM que provee cPanel nos basta con ejecutar:

/scripts/installruby

Pero no todo tiene porque ser tan sencillo. En esta guía nos queremos adentras además en todo lo que necesitamos conocer acerca de cómo resolver algunas dudas que pueden hacer que nuestra aplicación no responda como es debido.

Juguemos con otras versiones de Rails

Como venimos diciendo si lo que queremos es instalar versiones de Rails >= 3.X deberemos utilizar los siguientes pasos:

/scripts/installruby

Luego instalamos la última versión de Rails en correspondencia con la versión de Ruby instalada

gem install rails

Además tendremos que instalar la última versión de la gema passenger para que todo funcione:

gem install passenger
passenger-install-apache2-module

Este último comando lanza un Wizard para ensamblar rails con Apache. Al final de toda la instalación, pero justamente antes de completarla totalmente, nos aportará un código que deberemos copiar y pegar en nuestros ficheros de configuración de Apache (Include Editor en cPanel)

NOTA: Si durante el Wizard se localizan varios ficheros de configuración de Apache deberemos elegir el que corresponda. En caso que no sea el que nos marcan por defecto elegiremos NO (n), y reejecutaremos la operación pero con el Path adecuado:

passenger-install-apache2-module –apxs-path /usr/local/apache/bin/apxs

Seguimos con la inclusión del código reportado por el Wizard en el “pre_main_global.conf”

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.8.7-p551/gems/passenger-5.0.26/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-1.8.7-p551/gems/passenger-5.0.26
PassengerDefaultRuby /usr/local/rvm/gems/ruby-1.8.7-p551/wrappers/ruby
PassengerResolveSymlinksInDocumentRoot on
</IfModule>

También se recomienda añadir la siguiente línea (Visto en foros, NO TESTADO):

PassengerResolveSymlinksInDocumentRoot on

Por último añadir en “post_virtualhost_global.conf” lo siguiente

<IfModule mod_passenger.c>

PassengerPreStart http://miapp.enrails.com
</IfModule>

Por último aplicamos los cambios realizados en Apache (la primera línea del siguiente código es para hacer una

cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak-rails
/usr/local/cpanel/bin/apache_conf_distiller --update
/scripts/rebuildhttpdconf/etc/init.d/httpd restart

Versión Ruby en cPanel

Hay que tener en cuenta también esto, para revisar posibles incompatibilidades entre todos los componentes de que se disponen y/o se quieren disponer (por ejemplo Redmine 3.2.0 con Ruby sólo se permite para versiones de Ruby superiores a 1.9.3)

Las versiones actuales que instala cPanel y cómo se puede comprobar son las siguientes:

# ruby -v
ruby 1.8.7 (2009-06-08 patchlevel 173) [i686-linux]
# rails -v
Rails 2.3.8
# gem -v
1.3.7

Rails específico sólo para una aplicación concreta

Rails se encuentra frecuentemente instalado en local para otras versiones que utilizan este método, ya que algunas aplicaciones requieren de versiones diferentes de Rails en vez de la versión global de Rails. Se puede comprobar que versión de Rails se requiere utilizando el siguiente comando

# grep -i rails_version /home/username/rails_apps/appname/config/environment.rb

Para instalar dicha versión más antigua de Rails debemos ejecutar la instalación dentro del directorio de la aplicación:

# cd /home/admin/rails_apps/library
# gem install rails -v=2.3.4

Localización de directorios importantes

/home/username/rails_apps/appname/public ==> Localización de los ficheros públicos. Esto es lo que nos muestra nuestra navegador.

/home/username/rails_apps/appname/config ==> Este directorio contiene los ficheros database.yml y environment.rb files. El fichero database.yml adecua la base de datos para la aplicación rails (tanto mysql como sqlite o postgres, el nombre de la base de datos, el usuario y la contraseña). El fichero environment.rb establece la versión gema de rails a utilizar.

/home/username/rails_apps/appname/log ==> Este directorio contiene los archivos log.
/home/username/rails_apps/appname/app ==> Este directorio contiene el código principal para la aplicación con los directorios controllers, helpersm models y views dentro de él.

Como nota: las aplicaciones Rails sobre cPanel más antiguas son instaladas en /home/username/etc/rails_apps/appname, por si no se localizan en los directorios antes citados.

Pero, ¿y si mi servidor ya disponía de una versión de Ruby superior a 1.8.7?

 En este caso aun disponiendo de una superior, si lo que queremos es ir a por todas a por la versión 1.8.7 por el hecho que para nuestra futura instalación ésta sea la versión requerida esto es lo que debemos hacer.

Las versiones superiores de Ruby a, por ejemplo, no funcionan con el instalador de Gemas (Gems) de cPanel, o también si utilizamo el backend “mongrel” (anterior a Phusion Passenger) no funcionará con la versión 3.0.0 de Rails.

Reinstalar Ruby

Cada vez que queramos reinstalar Ruby (Ruby, Rails, Ruby Gem y Mongrel) tenemos que hacer lo siguiente

# mv /usr/lib/ruby /usr/lib/ruby.bak
# mv /usr/local/lib/ruby /usr/local/lib/ruby.bak
# mv /usr/bin/ruby /usr/bin/ruby.bak
# mv /usr/local/bin/ruby /usr/local/bin/ruby.bak
# mv /usr/bin/rails /usr/bin/rails.bak
# mv /usr/local/bin/rails /usr/local/bin/rails.bak
# mv /usr/bin/gem /usr/bin/gem.bak
# mv /usr/local/bin/gem /usr/local/bin/gem.bak

El mover los ficheros nos permite

  1. Revertir a nuestra anterior instalación si fuera necesario
  2. Limpiar cualquier traza existente de nuestra instalación inicial de Ruby, Rails, Ruby Gem y Mongrel.

Es en este momento en el que podremos lanzar una copia original de estos componentes ejecutando:

# /scripts/installruby

 Principales Fallos con las Aplicaciones

  1. Comprueba que la versión de Rails es 2.3.8 o inferior.

Si se ejecutan versiones superiores como Rails 3.0.0 las aplicaciones no se generarán adecuadamente en la interfaz cPanel y hacer que no arranque. La solución es hacer un downgrade de Rails a la versión compatible con cPanel.

Comprobamos de primeras la versión de Rails.

# rails -v

Realizar el “downgrade” de rails

# gem uninstall rails
# gem uninstall actionmailer
# gem uninstall activemodel
# gem uninstall actionpack
# gem uninstall activerecord
# gem uninstall activeresource
# gem uninstall activesupport
# gem uninstall railties
# gem install rails -v=2.3.8

Consejos para Gemas

  • Comprobar que gemas están instaladas
# gem list

o

# gem list --local
  • Ver la lista de gemas remotas (aquellas que podríamos instalar)

# gem list –remote

  • Instalar una versión específica de las gemas (Nota: sólo se puede instalar aquellas versiones que aparezcan en el repositorio de gemas)
Si por ejemplo queremos instalar sqlite3-ruby 1.2.5:
 # gem install sqlite3-ruby -v=1.2.5

Fallos al instalar una Gema

  • Cuando una gema no se instala por el motivo que sea, se producirá un fichero mkmf.log y dicha acción se reflejará como mensaje de error. Por ejemplo, el fallo al instalar la gema RMagick:
# gem install rmagick

Building native extensions.  This could take a while…

ERROR:  Error installing rmagick:

ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb

checking for Ruby version >= 1.8.5… yes

checking for gcc… yes

checking for Magick-config… yes

checking for ImageMagick version >= 6.4.9… no

Can’t install RMagick 2.13.1. You must have ImageMagick 6.4.9 or later.

*** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of

necessary libraries and/or headers.  Check the mkmf.log file for more

details.  You may need configuration options.

Provided configuration options:

–with-opt-dir

–without-opt-dir

–with-opt-include

–without-opt-include=${opt-dir}/include

–with-opt-lib

–without-opt-lib=${opt-dir}/lib

–with-make-prog

–without-make-prog

–srcdir=.

–curdir

–ruby=/usr/bin/ruby

Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/rmagick-2.13.1 for inspection.

Results logged to /usr/lib/ruby/gems/1.8/gems/rmagick-2.13.1/ext/RMagick/gem_make.out

También, como hemos comentado podemos revisar el fichero log correspondiente:

# cat /usr/lib/ruby/gems/1.8/gems/rmagick-2.13.1/ext/RMagick/mkmf.log

checking for Ruby version >= 1.8.5… ——————– yes

——————–

find_executable: checking for gcc… ——————– yes

——————–

find_executable: checking for Magick-config… ——————– yes

——————–

checking for ImageMagick version >= 6.4.9… ——————– no

——————–

Can’t install RMagick 2.13.1. You must have ImageMagick 6.4.9 or later.

System needs ImageMagick 6.4.9 or later.

Y podemos comprobar la versión instalada:

# convert –version

Version: ImageMagick 6.4.8 2010-10-14 Q16 http://www.imagemagick.org

Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC

In this instance, to install the gem, you would need to configure ImageMagick from source to get the higher version required:

# cd /usr/src

# wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

# tar xvfz ImageMagick.tar.gz

# cd ImageMagick*

# ./configure

# make

# make install

  • Gema no se instalan debido a fallo de sistema stdio.h. Al intentar instalar se muestran los siguientes errores:
ERROR: Error installing hpricot:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb
checking for stdio.h... no
*** extconf.rb failed ***

Comprueba los permisos de fichero de /usr/bin/ld y /usr/bin/gcc

Ambos tienen que estar a 755 para poder instalar gemas.

Si aún con todo el usuario no es capaz de instalar una gema, comprobar que tengan acceso al compilador:

WHM >> Security Center >> Compiler Access

Si no tuvieran acceso, no se podrían compilar algunas gemas. El usuario puede tanto habilitar el acceso compilador o instlaar la gema usando WHM o SSH a través de root.

(Opcional) Mongrel, Consejos específicos

Mongrel ya no se utiliza practicamente, y la recomendación es optar por utilizar Phusion Passenger (mod_rails), pero si siguieras interesado en esta aplicación puedes revisar la siguiente información:

Paramos primero los procesos de mongrel y utilizamos Rails para chequear errores.

Cambiaríamos al directorio de aplicación del usuario, y tras hacer un ps aux sobre procesos mongrel, mataríamos el proceso. Finalmente levantaríamos la aplicación manualmente.

# cd /home/username/rails_apps/appname
# ps aux | grep mongrel | grep username
# kill -9 pid#
# ruby script/server -p port# -d

Cuando reiniciemos la aplicación sin mongrel obtendremos los siguientes errores:

# ruby script/server -p 12008 -d

Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your

RAILS_GEM_VERSION setting in config/environment.rb for the Rails version

you do have installed, or comment out RAILS_GEM_VERSION to use the latest

version installed.

Esto nos indica que Rails 2.3.5 es requerido por lo que lo instalaríamos en la cuenta:

# gem install -v=2.3.5 rails

Y por último lo iniciaríamos a través de la línea de comandos:

# ruby script/server -p 12008 -d

=> Booting Mongrel

=> Rails 2.3.5 application starting on http://0.0.0.0:12008

Debes estar en el directorio de aplicación del usuario al ejecutar el comando

“ruby script/server -p port# -d”

Como nota, si utilizamos este comando en vez de ejecutarlo a través de procesos de mongrel veremos errores en el navegador una vez la aplicación se levante si siguen existiendo problemas de código.

Por último, tras conseguir que la aplicación funcione, puedes matar el proceso que corre bajo ese puerto y arrancar la aplicación utilizando cPanel > Ruby on Rails. También puede arrancarse desde línea de comandos utilizando esta sintaxis:

# /usr/bin/ruby -I /usr/bin/mongrel_rails start -p port# -d -e production -P log/mongrel.pid

Comparte este tutorial:

No hay comentarios en este tutorial

Sé el primero en enviar un comentario: