Instalación de redmine 0.6.4 en un host compartido

Desde hace unos días tenía ganas de instalar un software estilo forge (SourceForge, GForge, Trac, entre otros) para el control y registro de los proyectos en la Fundación donde paso la mayor parte del tiempo.Inicialmente estuve probando dotNetProject, sin embargo se veía complejo (muchas opciones) y me pareció que se centraba mas en el control del tiempo y de las actividades que en otras cosas mas técnicas que era lo que yo busco. Me interesa en este momento poder llevar el control de solicitudes (tickets) y errores reportados (bugs) a los diferentes proyectos y que se integre con el control de versiones del código para llevar la historia (time line) del desarrollo del proyecto, ojalá documentando los esfuerzos realizados por los ingenieros desarrolladores. Si a esto se le puede agregar el manejo de archivos y de documentación incluyendo un Wiki pues mucho mejor.

Algo muy similar a mis requerimientos fue lo que encontré en Trac, software muy utilizado por varios proyectos importantes opensource. Estaba muy interesado en instalarlo y probarlo cuando me di cuenta que está desarrollado en Python. Me preocupó que nunca había instalado nada en Python y menos para web, sin embargo eso nunca será un problema porque me divierte intentar cosas nuevas.

Sin embargo mientras revisaba información acerca de la instalación de este software encontré varias referencias positivas de otro similar que me empezó a llamar la atención: Retrospectiva. Este en cambio está desarrollado en Ruby on Rails. Igual situación, nunca había instalado nada en RoR pero todo se puede hacer en esta vida, nada es imposible.

Y nuevamente sucedió. Revisando documentación acerca de este software me llamó la atención otro mas con muchas características interesantes: Redmine. También hecho en RoR terminó por gustarme mas que el resto así que me decidí instalarlo para probarlo lo más rápido posible antes de que encontrara otro 😛 No se nada de RoR pero he estado aprendiendo un poco de Ruby y esto me dió más ánimos.

Pensé que si tanta gente habla tan bien de RoR debe ser fácil de instalar … error. No se si fue porque era la primera vez que instalaba un software desarrollado con este framework pero me pareció difícil y poco intuitivo. Seguí inicialmente las instrucciones y sugerencias generales que encontré después de una revisión rápida y sólo logré que apareciera un mensaje diciendo: “Application error, Rails application failed to start properly“. Si, claro, con gusto yo lo arreglo, pero dígame donde le duele ? Qué no le funciona ? Nada, no mas mensajes, cero logs.

Descubrí que era posible ejecutar el controlador frontal (public/dispatch.fcgi) desde línea de comando y pude ver que se generaba por consola una página de error 500. Esto por lo menos provocó que se generar registros (logs) y tuviera que investigar. El mensaje de error no ayudó mucho: “The error occurred while evaluating nil.downcase“. Por lo que a mi respectaba era un error de la aplicación que intentaba llamar un método en un objeto sin instanciar, sin embargo la búsqueda en Internet de este error sugirió que se podía deber a múltiples causas, la principal de ellas a una mezcla de versiones de software entre Ruby, Rails y librerías de Gems.

Todo pintaba mal. Sin embargo después de un día de trabajo (de 24 horas), mucha paciencia, muchos experimentos y consultas en Internet lo pude hacer funcionar 😮 Ahora tengo que tratar de sacar un tiempo para configurarlo completamente (integración con SVN), jugar con él y concluir si me es útil para mis labores como desarrollador de software.

A continuación detallo los pasos que seguí para realizar la instalación del software.

Descargué la distribución mas reciente de RubyForge, en este momento la 0.6.4.

$ wget http://rubyforge.iasi.roedu.net/files/redmine/redmine-0.6.4.zip

Se descomprimió y la renombre $INSTALL_HOME. Según parece las aplicaciones RoR se instalan por fuera del árbol público de directorios compartidos a través de web (alias public_html) y sólo debe hacerse público el directorio homónimo: /public. Para esto instalo el software en $INSTALL_HOME y después hago un enlace dinámico a /public.

$ unzip $HOME/redmine-0.6.4.zip

$ mv $HOME/redmine-0.6.4.zip $HOME/$INSTALL_NAME

$ cd $HOME/$INSTALL_NAME

Realicé la configuración de la base de datos.

$ cp $HOME/$INSTALL_NAME/config/database.yml.example $HOME/$INSTALL_NAME/config/database.yml

$ vi $HOME/$INSTALL_NAME/config/database.yml

production:
adapter: mysql
database: DATABASE_NAME
host: DATABASE_HOST
username: DATABASE_USERNAME
password: “DATABASE_PASSWORD”

Se solicitó la creación de las tablas en la base de datos.

$ rake db:migrate RAILS_ENV=”production”

Y de la inserción de los datos iniciales.

$ rake redmine:load_default_data RAILS_ENV=”production”

Se organizó el script que actúa como controlador frontal de la aplicación. Nótese que se eligió la versión FastCGI (fcgi) lo cual debe -en Dreamhost- activarse para el dominio específico donde se está trabajando, de lo contrario deberá utilizarse la versión CGI la cual es increiblemente lenta.

$ cp $HOME/$INSTALL_NAME/public/dispatch.fcgi.example $HOME/$INSTALL_NAME/public/dispatch.fcgi

$ dos2unix $HOME/$INSTALL_NAME/public/dispatch.fcgi

Se establecieron las reglas de ModRewrite para redireccionar todo el tráfico web a través del controlador frontal definido anteriormente. Nótese que esta regla se deja de última ya que inicialmente la tenía cerca al comienzo y estaba apareciendo la página pero fallaba el acceso a los contenidos de javascripts/ y stylesheets/ entre otros bajo /public ya que estos segmentos estaban siendo pasados al controlador como si fueran solicitudes de otros controladores y acciones.

$ vi $HOME/$INSTALL_NAME/public/.htaccess

SetEnv RAILS_ENV production
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
ErrorDocument 500 “Application errorRails application failed to start properly”

Como mencioné inicialmente, sólo /public debe poderse acceder a través de una petición web, por eso desde el directorio web del dominio ($DOMAIN_NAME) que en Dreamhost se ubica en $HOME y tiene el nombre del [sub]dominio creo un enlace que servirá como punto de acceso al sitio y apunta a la carpeta pública.

$ ln -s $HOME/$INSTALL_NAME/public $HOME/$DOMAIN_NAME/redmin

Se especifican los permisos de archivo necesarios para la ejecución del FCGI y se verifica la ejecución del mismo.

$ chmod 755 $HOME/$INSTALL_NAME/public/

$ chmod 755 $HOME/$INSTALL_NAME/public/dispatch.fcgi

$ $HOME/$INSTALL_NAME/public/dispatch.fcgi

Se remueve el archivo de distribución.

$ rm $HOME/redmine-0.6.4.zip

Y listo, software instalado! Se puede acceder al sitio a través de un navegador visitando $DOMAIN_NAME/redmine.

En caso de problemas tenga en cuenta estas sugerencias.

  • Verifique el funcionamiento y salida estándar de la ejecución directa por linea de comando del controlador frontal.$ $HOME/$INSTALL_NAME/public/dispatch.fcgi
  • Revise los logs del framework que se ubican en $HOME/$INSTALL_NAME/log. Es posible que no se estén generando durante el acceso web, sin embargo si se generarán si ud. realiza la sugerencia anterior.
  • Gracias al módulo WEBrick de Ruby es posible iniciar un servidor web independiente (puerto 3000) para verificar la instalación. Es útil para verificar que se va por buen camino, sin embargo no es la verificación final porque en mi caso el sitio se podía acceder a través de este servidor pero no a través del puerto 80 convencional debido a que tenía problemas de permisos de archivos y en el archivo .htaccess.$ ruby script/server -e production

Esta última sugerencia debe hacerse con cuidado y rapidez ya que Dreamhost detiene el servidor unos segundos después de iniciado y le envían a uno un correo regañadolo por incumplir los términos del contrato 🙁

Our automated system has come across the following activity under your account that is in violation of our Terms of Service.
We request that you take any necessary action to cease the activity as quickly as possible or we will be forced to take further action. If
you were not aware of any such activity, please feel free to contact support and we can look into the issue further.

User fdq_usr running “ruby script/server -e production”. This process is against our policies.

This appears to be a Denial of Service attack script

Enlaces: Actualización a Redmine 0.73.

Leave a Reply

Your email address will not be published. Required fields are marked *