Desplegar una aplicación rails en los servidores es una tarea complicada cuando se realiza manualmente, ya que necesita que iniciemos sesión en los servidores, subamos el código desde el sistema local cada vez y mantengamos la copia de seguridad de las actualizaciones por si queremos revertirlas.
El proceso consume mucho tiempo y necesitamos parar, arrancar y reiniciar los servidores de aplicaciones cada vez que necesitamos actualizar. Esta tarea puede simplificarse utilizando estas dos herramientas de despliegue, a saber Capistrano y Pasajero Phusion (también llamado "mod_rails").
El procedimiento de instalación de ambas herramientas es bastante similar, ya que ambas se instalan como gemas de Rails. Esa es la especialidad de Marco de rieles que tiene todas las herramientas necesarias para operar construir como gemas.Pero la diferencia es que Capistrano ayuda a subir el código y desplegar mientras que Pasajero Phusion es un módulo de Apache que nos ayuda a desplegar una aplicación rails en Apache de una brisa.
La instalación de las Herramientas es como se muestra a continuación :
Pasos para instalar la gema Capistrano
#sudo gem install capistrano
Este comando instala la gema Capistrano y puedes empezar a usar la herramienta Capistrano en tu aplicación rails para desplegarla en el servidor.
Pasos para instalar Phusion passenger
#su -
Para instalar Phusion passenger necesitamos tener permisos de root porque algunos archivos utilizados para instalarlo necesitan ser compilados, lo que requiere permisos de root.
#gem instalar pasajero
Este comando instala la gema Passenger. No necesitamos que Passenger esté instalado en nuestro sistema local para poder hacer uso de él. Necesitamos el Passenger instalado en el sistema servidor en el que vamos a desplegar la aplicación. Dado que Passenger es un módulo de Apache, necesitamos instalar el módulo de Apache usando el siguiente comando.
Módulo #passenger-install-apache2
Este comando instala el módulo Apache para la herramienta passenger. Mientras se instala, comprueba los distintos requisitos a diferencia de la instalación de la gema Capistrano.
Hay dependencias que necesitan ser instaladas para instalar el módulo Passenger Apache. No tenemos que preocuparnos mucho por las dependencias ya que el proceso de instalación, por sí mismo, comprueba la disponibilidad de las dependencias y si no están disponibles, nos dará los comandos para instalar las dependencias. Sólo tenemos que seguir las instrucciones que nos da y Passenger estará instalado y listo para usar. Durante la instalación nos pide que añadamos algo de código al fichero de configuración de Apache como se indica a continuación:
LoadModule passenger_module /somewhere/passenger-x.x.x/ext/apache2/mod_passenger.so PassengerRuby /usr/bin/ruby PassengerRoot /somewhere/passenger/x.x.x PassengerMaxPoolSize 10
Si no deseamos instalar esas dependencias y abortamos a la mitad, entonces la instalación termina ya que Passenger no puede ejecutarse sin esas dependencias. Nótese que sólo necesitamos Passenger instalado en el servidor y no en nuestro sistema local. Una vez instaladas estas dos herramientas, juntas nos proporcionan una forma muy flexible y sencilla de desplegar la aplicación rails en cualquier número de servidores a la vez.
Para usar Capistrano para desplegar tu aplicación necesitas capificar tu aplicación usando este comando:
../rails_app # capify
Capistrano lee las instrucciones de un capfile y las procesa tal y como se indican en él. Capfile es donde le dirás a capistrano todos los servidores a los que quieres conectarte y las tareas que quieres realizar en esos servidores. El capfile contiene un script Ruby aumentado con un gran conjunto de sintaxis de ayuda para facilitar la definición de roles y tareas del servidor. El código de ejemplo del capfile tendrá el siguiente aspecto :
role :libs, "crimson.capify.org", "magenta.capify.org" role :files, "fuchsia.capify.org" task :search_libs, :roles => :libs do run "ls -x1 /usr/lib | grep -i xml" end task :count_libs, :roles => :libs do run "ls -x1 /usr/lib | wc -l" end desc "Enlazar en la base de datos de producción.yml" task :link_production_db do run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" end
Cuando estamos utilizando Capistrano tenemos que configurar la estructura de la aplicación utilizando el siguiente comando :
../rails_app # cap deploy:setup
Cuando ejecutamos este comando en nuestra aplicación Capistrano configurará la estructura de la aplicación. La aplicación después de desplegarse tendrá carpetas con nombres como shared, releases y un enlace simbólico llamado current que apunta al último código de la última versión en la carpeta releases.
Cada vez que modifiquemos o actualicemos el código y lo liberemos a través de Capistrano, se añadirá la nueva carpeta a la carpeta releases con el número de versión de la liberación (el número de versión se basará en la marca de tiempo). El enlace simbólico actual apuntará a la última versión que contiene el código más reciente.
Las tareas escritas en Capfile son legibles y es muy fácil escribirlas para una persona que pueda trabajar con la línea de comandos del shell de Linux. Para ver cuáles son las tareas presentes en el Capfile debemos utilizar este comando que muestra los datos auto-documentados:
#cap -T o cap -vT
(-v es para descripciones detalladas)
Esto muestra la lista de tareas junto con las descripciones como se indica a continuación:
cap deploy # Despliega tu proyecto. cap deploy:check # Comprueba las dependencias del despliegue. cap deploy:cleanup # Limpia versiones antiguas. cap deploy:migrate # Ejecuta la tarea rake migrate. cap deploy:pending # Muestra los commits desde tu último despliegue.
Considera que has escrito el script ruby en capfile para desplegar la aplicación. Ahora, si desea desplegar la aplicación, es necesario ejecutar esto en el símbolo del sistema:
# cap desplegar
Entonces, de acuerdo con los detalles de los servidores y la ruta de la aplicación especificada en el capfile, Capistrano desplegará la aplicación. Si está ejecutando servidores de aplicaciones mongrel para cada aplicación, entonces necesita escribir el comando para iniciar el servidor mongrel como una tarea en el capfile.
Supongamos que está utilizando Phusion passenger para ejecutar la aplicación, entonces usted necesita agregar la tarea de iniciar y reiniciar la aplicación utilizando Phusion passenger en el capfile.
Desc "Iniciar aplicación" task :start do run "touch #{ruta_actual}/tmp/restart.txt" end desc "Reiniciar aplicación" task :restart do run "touch #{ruta_actual}/tmp/restart.txt" end
El entorno por defecto en el que el pasajero Phusion ejecuta la aplicación es la producción, si queremos cambiar el entorno entonces tenemos que modificar el RAILS_ENV en el archivo de entorno.
Cuando se utiliza Phusion passenger, que se ejecuta como un módulo de Apache, se ejecuta el servidor de generación para la aplicación y en cada operación de reinicio se genera el servidor con una nueva instancia. Usando Phusion passenger puede desplegar la aplicación a un host virtual URI. Para ello es necesario añadir la entrada de host virtual en el archivo de configuración de Apache como se muestra en el código de ejemplo a continuación:
ServerName www.domain-name.com DocumentRoot /webapps/rails_app/public Permitir desde todos Opciones -MultiViews
Al hacerlo, debemos tener en cuenta las siguientes condiciones:
*La raíz del documento del host virtual debe apuntar a su Ruby on Rails carpeta pública de la aplicación. *Los permisos por directorio de Apache deben permitir el acceso a esta carpeta. *MultiViews debe estar deshabilitado para esta carpeta.
Si desea desplegar a un sub_URI, teniendo en cuenta que ya tenemos un host virtual, entonces tenemos que añadir el código como se muestra a continuación:
ServerName www.domain-name.com DocumentRoot /websites/phusion Permitir desde todos RailsBaseURI /rails Opciones -MultiViews
Y si quieres que tu Aplicación Ruby on Rails para que sea accesible desde alguna URL como http://www.domain-name.com/rails entonces necesitas crear un enlace simbólico desde la carpeta pública de tu aplicación Ruby on Rails a un directorio en la raíz del documento.
Por ejemplo:
#ln -s /webapps/rails-app/public /websites/phusion/rails
Una vez creado este enlace simbólico tendrás que reiniciar Apache y la aplicación se habrá desplegado. Puedes desplegar múltiples aplicaciones rails bajo un host virtual especificando RailsBaseURI varias veces.
Una vez iniciada la aplicación , si queremos reiniciarla tenemos que hacer una de estas dos cosas:
a) Reinicie el servidor web Apache. b) Utilice el comando
# touch ../ruta_a_la_app/rails_app/tmp/restart.txt
Dado que estamos utilizando Phusion passenger, que es un módulo de Apache, el registro de ejecución se registrará tanto en Apache error_logs como en el archivo de registro de la aplicación. A veces no se registran en el registro de aplicaciones Rails. En ese caso, es necesario comprobar los permisos y solucionar este problema variando los permisos del archivo de registro.
Cuando se utiliza Capistrano con Phusion passenger se puede desplegar en más de un servidor a la vez e incluso iniciar y reiniciar la aplicación en una sola ejecución. Por lo tanto, es mucho más fácil desplegar una Aplicación de rieles utilizando Capistrano y Phusion passenger.
Póngase en contacto con nosotros.