Previously I wrote about Configuring Capistrano and Mongrel. Now we are going to configure Apache to work with the Mongrel cluster.
For this article I used the chapter Setting Up A Development Environment in Agile Web Development with Rails, version 2.0, plus this article.
Capistrano working together with Mongrel allows you to deploy and restart Mongrel clusters quite nicely.
Configure Apache proxy balancer
Apache has a mod_proxy_balancer module which must be enabled. Once this is done you can add the following to the end of conf/httpd.conf
or if you are on Red Hat Linux you can put the proxy balancing section in /etc/httpd/conf.d/myapp.proxy_cluster.conf
and the virtual host section in /etc/httpd/conf.d/myapp.conf
.
<Proxy balancer://mongrel_cluster>
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002
</Proxy>
<VirtualHost *:80>
Include conf/myapp.common (or Include conf.d/myapp.common)
ErrorLog logs/myapp_errors_log
CustomLog logs/myapp_log combined
</VirtualHost>
Configure Apache Virtual Host
Next you configure the virtual host that represents the Ruby on Rails application in the custom file conf/myapp.common
or if you are on Red Hat Linux in /etc/httpd/conf.d/myapp.common
.
ServerName myapp.com
DocumentRoot /usr/local/rails/myapp/current/public
<Directory "/usr/local/rails/myapp/current/public">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
# Uncomment for rewrite debugging
#RewriteLog logs/myapp_rewrite_log
#RewriteLogLevel 9
# Check for maintenance file and redirect all requests
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]
# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA]
# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]
# Redirect all non-static requests to cluster
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
Restart Apache
$ sudo /usr/local/apache2/bin/httpd -k restart
or
$ sudo /etc/init.d/httpd restart