Como instalar una aplicación Rails con Mongrel y Apache
Este documento asume que conoces el resto de requerimientos para instalar una aplicación rails: colocar los archivos en el lugar apropiado y configurar database.yml (y los requisitos para instalar y configurar mysql y los usuarios de mysql).
1) Coloca un archivo mongrel_cluster.yml que contendrá tu IP privada automáticamente, y escribe los PIDs específicos para cada host.
# cd /home/YOUR/PATH/TO/RAILS/APP # svn export http://svn.joyent.com/public/accelerators/configs/mongrel/mongrel_cluster.yml config/mongrel_cluster.yml
2) Lanza la aplicación
# cd /home/YOUR/PATH/TO/RAILS/APP # mongrel_rails cluster::start
3) Comprueba que obtienes algo
# curl `myprivateip`:8000 # curl -I `myprivateip`:8000
La segunda petición debería devolver un “200”, como
HTTP/1.1 200 OK Connection: close Date: Tue, 06 Mar 2007 07:09:13 GMT Status: 200 OK Server: Mongrel 1.0.1 Content-Type: text/html Content-Length: 0
Si no sucede nada, revisa tu production.log
4) Configura un host virtual de apachean para emplearlo de proxy para balancear estos mongrels
# cd /opt/csw/apache2/etc/virtualhost # nano myrailsapp-domain.conf
Con los contenidos de
<VirtualHost YOUR-PUBLIC-IP:80>
ServerName YOURDOMAIN.com ServerAlias *.YOURDOMAIN.com
DocumentRoot /home/YOUR/PATH/TO/RAILS/APP/public
<Directory "/home/YOUR/PATH/TO/RAILS/APP/public/">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app1-mongrels%{REQUEST_URI} [P,QSA,L]
<Proxy balancer://app1-mongrels>
BalancerMember http://YOUR-PRIVATE-IP:8000
BalancerMember http://YOUR-PRIVATE-IP:8001
BalancerMember http://YOUR-PRIVATE-IP:8002
BalancerMember http://YOUR-PRIVATE-IP:8003
</Proxy>
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass / balancer://app1-mongrels
ProxyPassReverse / balancer://app1-mongrels
ProxyPreserveHost On
</VirtualHost>
Necesitas tener un nombre único para “balancer://app1-mongrels” y los puertos que emplees son los mismos que en tu mongrel_cluster.yml
A continuación, reinicia apache:
# apachectl restart
En este punto, tu sitio debería estar accesible sin especificar el puerto. Compruébalo con curl (como arriba) o desde tu navegador. Si obtienes un error o la página por defecto de Joyent, revisa tu configuración de apache, reinicia apache y repite.
5) El último pasao es prepararlo para el reinicio – asegúrate que tu aplicación está bajo SMF
Reemplaza YOURAPP, el valor de /HOME/YOUR/PATH/TO/RAILS/APP, y USER y GROUP
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='mongrel/YOURAPP-production'>
<service name='network/mongrel/YOURAPP-production' type='service' version='0'>
<create_default_instance enabled='true'/>
<single_instance/>
<dependency name='fs' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
<dependency name='net' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/network/loopback'/>
<!-- need nfs/client because the mongrel stuff is on /home which is nfs mounted -->
<service_fmri value='svc:/network/nfs/client'/>
</dependency>
<dependent name='mongrel_multi-user' restart_on='none' grouping='optional_all'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependent>
<exec_method name='start' type='method' exec='/opt/csw/bin/mongrel_rails cluster::start' timeout_seconds='60'>
<method_context working_directory='/HOME/YOUR/PATH/TO/RAILS/APP'>
<method_credential user='USER' group='GROUP' />
<method_environment>
<envvar name="PATH" value="/usr/bin:/bin:/opt/csw/bin" />
</method_environment>
</method_context>
</exec_method>
<exec_method name='stop' type='method' exec=':kill' timeout_seconds='60'>
<method_context/>
</exec_method>
</service>
</service_bundle>
Pon este archivo xml en:
# nano /HOME/YOUR/PATH/TO/RAILS/APP/mongrel-app-smf.xml
Y, a continuación:
# cd /HOME/YOUR/PATH/TO/RAILS/APP/ # mongrel_rails cluster::stop # rm log/*.pid # svccfg import /HOME/YOUR/PATH/TO/RAILS/APP/mongrel-app-smf.xml # svcadm enable mongrel/YOURAPP-production # svcs -v | grep mongrel