Run your rails application with apache2 and mongrel_clusters
Install Apache 2.2 and enable the needed modules (url rewriting, proxy, proxy_balancer e proxy_http)
sudo apt-get install apache2
# enable your modules in apache
sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
# if you not enabled any of the modules then may be errors occured while you restart your apache after adding the below configration
# Error may be encoutered it yoou have not enabled module rewrite is "Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration"
Install Mongrel, create a mongrel user, create the mongrel cluster
sudo gem install daemons gem_plugin mongrel mongrel_cluster --include-dependencies
You can continue with the same linux user to mongrel if you want otherwise you can create new user by
sudo /usr/sbin/adduser mongrel
This line creates new user mongrel withg same mongrel group
Now need to create one mongrel_cluster.yml
sudo mongrel_rails cluster::configure -e production -p 3010 -N 2 -c /home/user/projects/myapp -a 127.0.0.1 --user mongrel --group mongrel
here -e = your working environment
-p = your port for run application
-N = Number of instances of the application. here 2 instances for my application and port is 3010. so this application will work on 3010 and 3011 port
--user = need to provide your linuxuser
--group = need to provide your linuxgroup
this line will create /config/mongrel_cluster.yml file with following command
user: mongrel
cwd: /home/user/projects/myapp
log_file: log/mongrel.log
port: "3010"
environment: production
group: mongrel
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 2
now make sure that tmp and log folder has permission to the user/group which you have user in mongrel_cluster if not assign permission by
sudo chown -R mongrel:mongrel /path/to/app/tmp
# Now start mongrel clusters
sudo mongrel_rails cluster::start
Hopefully clusters is worked perfactly and you can get it run on multiple port 3010 and 3011
http://127.0.0.1:3010
http://127.0.0.1:3011
Now need to set proxy balancer for this app
For this need to create one host for you app
Go to sudo nano /etc/hosts
127.0.0.1 localhost
127.0.0.1 myapp
Now need to configure Apache configuration file (sudo gedit /etc/apache2/sites-available/default).
NameVirtualHost *:80
#we need this as on Ubuntu/debian by default Proxy is not allowed
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
#Proxy balancer section (create one for each ruby app cluster)
<Proxy balancer://myapp_cluster>
BalancerMember http://myapp:3010
BalancerMember http://myapp:3011
</Proxy>
#Virtual host section (create one for each ruby app you need to publish)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName myapp
DocumentRoot /home/user/projects/myapp/public/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/debian/chirag/mycalltime/public/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
#Rewrite stuff
RewriteEngine On
# 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://myapp_cluster%{REQUEST_URI} [P,QSA,L]
</VirtualHost>
After configure the default file need to restart apache
sudo /etc/init.d/apache2 restart
Cheers....
You get your app running on multiple instanses with proxy balancer
http://myapp