Monday, August 11, 2008

Using thin with rails (apache frontend)

prerequisites (running on redhat/centos 5)

ruby 1.8.6+ (download, untar, configure, make, make install [reboot])
rubygems (download, untar, ruby rubygems/setup.rb)
rails (gem install rails)
thin (gem install thin)
apache 2.2 (installs apache to /usr/local/apache2 with mod_proxy/_balancer)
  • download
  • untar
  • ./configure --enable-proxy --enable-proxy-balancer --enable-rewrite --enable-deflate --enable-headers
  • make && make install
Install the thin run script
# thin install

Installing the thin configuration file
# vi /etc/thin/thin_conf.yml
---
user: daemon
group: daemon
chdir: /var/www/rails_app/current
log: log/mongrel.log
pid: tmp/pids/mongrel.pid
environment: production
port: 8000
address: 127.0.0.1
servers: 3

# /etc/init.d/thin start

Now lets add the proxy configs to apache...

in httpd.conf:

Include conf/extra/*.conf

now add your vhost config in conf/extra/httpd-rails_app.conf ...

# vi conf/extra/httpd-rails_app.conf

# Always keep the host header
ProxyPreserveHost On


BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
BalancerMember http://127.0.0.1:8002



ServerName www.rails_app.com
ServerAlias rails_app.com
DocumentRoot /var/www/rails_app/current/public


Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all


ProxyPass /images !
ProxyPass /javascripts !
ProxyPass /stylesheets !
ProxyPass /uploads !
ProxyPass /photos !

ProxyPass / balancer://rails_cluster/
ProxyPassReverse / balancer://rails_cluster/

# =============================================
# Configure Deflate Module (gzip)
# =============================================

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# =============================================
# Virtualhost logs
# =============================================
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog

ErrorLog logs/www/error_log
CustomLog logs/www/access_log combined env=!dontlog



# /usr/local/apache2/bin/apachectl start

rails thin apache all working together.... :)

No comments: