i76 webdesign, Sittard

7 september 2010

Weblog Rubrieken

i76 webdesign, Sittard

Rails, Apache, Mongrel en mod_proxy configureren

Geschreven door: Tom-Eric

De titel lijkt nikszeggend, maar probeer maar eens een pakkende titel te vinden die in het kort samenvat dat je artikel gaat over het hosten van Ruby on Rails applicaties op mongrel, gebruik makend van Apache en mod_proxy voor het serveren van je statische content (zoals afbeeldingen, scripts en stylesheets). Op dit moment een van de beste manieren om RoR applicaties te hosten.

Er komt namelijk een tijd dat je je prachtige web applicatie online wilt plaatsen, en alhoewel er meer dan genoeg providers zijn die RoR hosting aanbieden, is het natuurlijk veel leuker om het zelf te doen!

Allereerst een lijstje van dingen die je nodig hebt:

Aangezien het installeren van deze packages op elk OS anders is, gaan we hier niet te diep op in. Wij draaien zelf debian stable op onze servers, en hebben Apache en mod_proxy via apt-get geinstalleerd, mongrel en mongrel_cluster hebben we echter via Ruby Gems geinstalleerd.

Nu komt het leuke gedeelte, het configureren van je server!

Laten we eerst een mongrel configuratie bestand genereren. We gaan in onze voorbeelden even uit van een voorbeeld rails applicatie die we webwinkel noemen.

$ cd /home/webwinkel
$ mongrel_rails cluster::configure -e production -p 5000 -N 1
   -c /home/webwinkel -a 127.0.0.1

Wat doet het mongrel_rails cluster::configure gedeelte precies? En wat betekenen de argumenten die we meegeven?

Als het goed is hebben we nu in /home/webwinkel/config een bestand staan dat mongrel_cluster.yml heet. Aangezien we straks het liefste al onze rails applicaties tegelijk opstarten, gaan we hiervoor een startup script schrijven. Hiervoor willen we alle configuratie bestanden het liefste op 1 centrale plek. Wat ik persoonlijk de makkelijkste oplossing vind is een directory /etc/mongrel_cluster te maken, en onze configuratie bestanden hier in te symlinken.

$ mkdir /etc/mongrel_cluster
$ ln -s /home/webwinkel/config/mongrel_cluster.yml
   /etc/mongrel_cluster/webwinkel.yml

Nu nog een script dat hier gebruik van maakt. Ik heb dit in /etc/init.d/mongrel_cluster staan:

#!/bin/bash

CONF_DIR=/etc/mongrel_cluster
RETVAL=0

case "$1" in
    start)
      mongrel_cluster_ctl start -c $CONF_DIR
      RETVAL=$?
  ;;
    stop)
      mongrel_cluster_ctl stop -c $CONF_DIR
      RETVAL=$?
  ;;
    restart)
      mongrel_cluster_ctl restart -c $CONF_DIR
      RETVAL=$?
  ;;
    *)
      echo "Usage: mongrel_cluster {start|stop|restart}"
      exit 1
  ;;
esac

exit $RETVAL

Nu kan ik door /etc/init.d/mongrel_cluster start aan te roepen, al mijn mongrel servers starten!

Aangezien mongrel een fijne webserver is voor rails applicaties, maar niet zo heel snel is in het serveren van statische content (afbeeldingen, scripts, stylesheets, ed.), gaan we nu Apache zo configureren, dat deze alle aanroepen naar statische content behandeld, en de resterende aanroepen doorsluist naar mongrel.

Open het bestand waar je je virtual host in configureert (in debian bijvoorbeeld /etc/apache2/sites-enabled/webwinkel.i76.nl), en voeg, uiteraard aangepast naar eigen instellingen, onderstaande tekst toe:

<VirtualHost *:80>
  ServerName webwinkel.i76.nl

  DocumentRoot /home/webwinkel/public/

  <Directory /home/webwinkel/public/>
    Options +FollowSymlinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>

  ProxyRequests Off
  ProxyPass / http://127.0.0.1:5000/
  ProxyPassReverse / http://127.0.0.1:5000/
  ProxyPreserveHost On

  # Voor statische files
  RewriteRule "^/(images|stylesheets|javascripts)/?(.*)" "$0" [L]
  # Als een pagina gecached is, vraag die dan op
  RewriteRule ^([^.]+)$ $1.html [QSA]
  # Anders dan ...
  RewriteCond %{REQUEST_FILENAME} !-f
  # Sturen we het door naar onze mongrel
  RewriteRule "^/(.*)" "http://localhost:5000/$1" [P,QSA,L]
</VirtualHost>

Een herstart van Apache 2 later, en alles werkt precies zoals je het wilt. Mocht je website zeer populair worden, dan heeft het zeker zin om te kijken naar mongrel cluster configuraties. Hieronder een aantal gerelateerde links:

2 reacties voor “Rails, Apache, Mongrel en mod_proxy configureren”

  1. remco zegt:

    Hi,

    ik heb de bovenstaande code geplaats alleen ik krijg de melding dat de pagina niet bestaat.

    http://www.goedkoop-vliegen.nu/pages

    error> The page you were looking for doesn’t
    exist.

    Wat kan de oorzaak zijn?

    Groetjes,
    remco

  2. Tom-Eric zegt:

    Hi,

    ik heb de bovenstaande code geplaats alleen ik krijg de melding dat de pagina niet bestaat.

    http://www.goedkoop-vliegen.nu/pages

    error> The page you were looking for doesn’t
    exist.

    Wat kan de oorzaak zijn?

    Heb je wel een pages controller (app/controllers/pages_controller.rb)? Het kan natuurlijk aan heel veel dingen liggen. Ik raad je trouwens aan om te kijken naar modrails, wat dit weekend is uitgekomen. Dit versimpelt het deployen van je applicatie waanzinnig!

Laat een reactie achter




XHTML: Je mag deze elementen en attributen gebruiken: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


i76 webdesign, Sittard
Tel 046 4007004
Fax 046 4009640
E-mail