Rails, Mongrel, Apache cluster

Allikas: Kuutõrvaja

Rails ja Apache mitme projektiga server

Süsteem toimib nii, et Apache suunab vhostide info mongrel serverile, mis siis railsi skripte esile manab.

Apache tuleb kompileerida koos proxy moodulitega ja kasutamiseks sobib vaid apache22 mis sisaldab meile vajalikku proxy balancerit

FreeBSD's tuleb apache installida selliselt.

cd /usr/ports/www/apache22
make install with_proxy_modules=yes

Muudes osides tuleb uurida enda tarkvara installerite manuale.

gem install mongrel
gem install mongrel_cluster

Lihtsaim viis mongrelit kasutada on ta startida nagu webrick.

cd progeadmin
$ mongrel_rails start -d

ja seiskamiseks

$ mongrel_rails stop

Antud juhul on meil keerukam probleem nimelt on kaks eraldi railsis loodud programmi, mis asuvad

/home/rails/progeadmin/
/home/rails/veebiadmin/

Ning vaja oleks ,et progeadmin avaneb aadressiga www.katse.ee ja veebiadmin www.nimi.ee ja samas saaks serveris kasutada ka mitmesugust saatilist materjali ja teisi lehti.

Mongrel Cluster seadistus neile kahele tarkvarale


# cd /home/rails/progeadmin
# mongrel_rails cluster::configure -e production -p 8000 -N 3 -a 127.0.0.1
Writing configuration file to config/mongrel_cluster.yml.
# cd veebiadmin
# mongrel_rails cluster::configure -e production -p 8100 -N 3 -a 127.0.0.1
Writing configuration file to config/mongrel_cluster.yml.


Need käsud kirjutavad konfiguratsiooni faili kummagile config/mongrel_cluster.yml.

n2iteks /home/progeadmin/rails/config/mongrel_cluster.yml sisu n2eb v2lja selline

log_file: log/mongrel.log
port: "8000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3

Mongrel clustrite startimiseks tuleb

# cd progeadmin
# mongrel_rails cluster::start
starting port 8000
starting port 8001
starting port 8002
# cd  veebiadmin
# mongrel_rails cluster::start
starting port 8100
starting port 8101
starting port 8102

Nende käskude peale käivituvad kummagi railsi kohta kolm mongrel protsessi Esimesel portidele 8001 8002 8003 ja teisel 8101 8102 8103


httpd.conf

Kontrollime, et oleks laaditud moodulid

proxy_module
proxy_connect_module
proxy_http_module
proxy_balancer_module


Nüüd loome mõlemale progele nende vhostid

NameVirtualhost 193.40.0.62:80 

<VirtualHost 193.40.0.62:80>
  ServerName www.katse.ee

  RewriteEngine On

 # Redirect all non-static requests to cluster
 RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]

</VirtualHost>

<VirtualHost 193.40.0.62:80>
  ServerName www.nimi.ee 
  RewriteEngine On

 # Redirect all non-static requests to cluster
 RewriteRule ^/(.*)$ balancer://mongrel_cluster2%{REQUEST_URI} [P,QSA,L] 

</VirtualHost>
<Proxy balancer://mongrel_cluster>
   BalancerMember http://127.0.0.1:8001
   BalancerMember http://127.0.0.1:8002
   BalancerMember http://127.0.0.1:8003
</Proxy>

<Proxy balancer://mongrel_cluster2>
   BalancerMember http://127.0.0.1:8101
   BalancerMember http://127.0.0.1:8102
   BalancerMember http://127.0.0.1:8103
</Proxy>

Listen 8000
<VirtualHost 193.40.0.10:8000>
 <Location />
   SetHandler balancer-manager
   Deny from all
   Allow from localhost
 </Location>
</VirtualHost>


Edasine seadistus

Juhul kui muutub railsi versioon tuleks uuenda ka koodi

rake rails:update 

Juhtum kui on railsi kood vaja domeenis tuua esile kujul http://www.nimi.ee/admin samas kui www.nimi.ee all on teine kood v2i veeb

 # Rewrite to trailing slash
 RewriteRule ^/admin$ /admin/ [R,L]

 # test if this is /admin request
 RewriteCond %{REQUEST_URI} ^/admin(/.*)
 # strip off /admin and put result in ENV
 RewriteRule ^/admin(.*) /admin$1 [E=AdminReq:$1]

 RewriteCond /home/rails/admin/public/%{ENV:AdminReq} -f
 # serve static files
 RewriteRule ^/admin/(.*) /home/rails/admin/public/$1 [L]
 # If request is not static, proxy to rails
 RewriteRule ^/(admin/.*)$ balancer://mongrel_cluster2/$1 [P,QSA,L]

Lingid

http://www.rubyonrails.org/

http://blog.innerewut.de/articles/2006/04/21/scaling-rails-with-apache-2-2-mod_proxy_balancer-and-mongrel

http://www.webmasterwords.com/ruby-rails-mongrel-apache-easy

Veel suurem hulk näiteid

http://www.digitalmediaminute.com/article/1816/top-ruby-on-rails-tutorials