Joyent

Translations of this page:

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
 
es/accelerators/apache_rails_mongrel.txt · Last modified: 2007/07/30 13:51 by pedrocandel
 
Recent changes RSS feed Creative Commons License Driven by DokuWiki