24
© ThoughtWorks, 2006 Deploying Rails Applications Vivek Prahlad

Deploying Rails Applications

Embed Size (px)

DESCRIPTION

Covers the different options for scaling Rails applications, Nginx, a light weight HTTP server / reverse proxy, using Cron for periodic scheduled task, and Monit for monitoring rails applications.

Citation preview

Page 1: Deploying Rails Applications

© ThoughtWorks, 2006

Deploying Rails Applications

Vivek Prahlad

Page 2: Deploying Rails Applications

© ThoughtWorks, 2006 2

Agenda

Typical Rails deployment scenarios

Mongrel

Nginx vs. Apache vs. Lighttpd

Shared vs. Virtual vs. Dedicated hosting

Monitoring Rails Applications

Page 3: Deploying Rails Applications

© ThoughtWorks, 2006

Typical Rails Deployment Setup

Web Server(Static Content)

Rails App(Mongrel)

Database(MySQL / PostgreSQL)

Page 4: Deploying Rails Applications

© ThoughtWorks, 2006

Lots of Static content?

Web Server(Static Content)

Rails App(Mongrel)

Database)

(MySQL / PostgreSQL)

Load

Bal

ance

r

Cluster

Page 5: Deploying Rails Applications

© ThoughtWorks, 2006

Heavy database load?

Web Server(Static Content)

Rails App(Mongrel)

Database(MySQL / PostgreSQL)

Cluster

Page 6: Deploying Rails Applications

© ThoughtWorks, 2006

Very dynamic application?

Web Server(Static Content)

Rails App(Mongrel)

Database(MySQL / PostgreSQL)

Cluster

Page 7: Deploying Rails Applications

© ThoughtWorks, 2006 7

Installing the stack using Deprec

cd /path/to/railsapp

deprec --apply-to . --name projectname --

domain www.projectname.com

# edit config/deploy.rb to add svn details

cap install_rails_stack

cap setup

cap deploy_with_migrations

cap restart_apache

Page 8: Deploying Rails Applications

© ThoughtWorks, 2006

Mongrel

Page 9: Deploying Rails Applications

© ThoughtWorks, 2006 9

Mongrel

Pure Ruby web server for Ruby applications

Supports Rails, Camping, Og + Nitro

Need a cluster due to Rails threadsafety issue

Significant footprint increase with Rails 1.2

• Approximately 60MB / Mongrel / Mephisto

instance

Dash B logging for detecting memory leaks

Page 10: Deploying Rails Applications

© ThoughtWorks, 2006

Page 11: Deploying Rails Applications

© ThoughtWorks, 2006 11

Nginx

Web server from Igor Sysoev: best used as a

reverse proxy

Rapidly becoming preferred choice of Rails

community

10MB footprint with 10,000 concurrent

connections

Load balancing

Weighted load balancing

Relatively straightforward configuration

Page 12: Deploying Rails Applications

© ThoughtWorks, 2006 12

Nginx vs. Apache

Apache: Relatively Larger footprint

Thread per request

Nginx: Low footprint

Non blocking IO

Page 13: Deploying Rails Applications

© ThoughtWorks, 2006 13

Issues with Lighttpd

Stability

Memory leaks

Non-trivial URL rewriting

Page 14: Deploying Rails Applications

© ThoughtWorks, 2006 14

Nginx: configuring mongrel

upstream mongrel {

server 127.0.0.1:10000;

server 127.0.0.1:10001;

}

proxy_pass http://mongrel;

Page 15: Deploying Rails Applications

© ThoughtWorks, 2006 15

Nginx: load balancing

upstream backend {

server backend1.example.com weight=5;

server backend2.example.com:8080;

server unix:/tmp/backend3;

}

Page 16: Deploying Rails Applications

© ThoughtWorks, 2006 16

Nginx: Caveats

Primary documentation in Russian

• (Documentation is rapidly improving,

though)

No X-sendfile support (useful for serving large

files)

Virtual host support poor

Page 17: Deploying Rails Applications

© ThoughtWorks, 2006 17

Rails Hosting

Rails 1.2+ unsuitable for shared hosting

Most shared hosts have published / unpublished

memory caps

• Textdrive: 47 MB per process

Dedicated hosting expensive

• Starts at ~ $70 per month (e.g.

ServerPronto)

Page 18: Deploying Rails Applications

© ThoughtWorks, 2006 18

Virtual Private Server (VPS) Hosting

Fits in between Shared and Dedicated hosting

Nice performance / price ratio (starts @ $20 /

month)

Can potentially exploit superior hardware

Alternatives:

• Xen

• Virtuzzo

Baked in kernel level virtualization support is

coming

Caveat: Need to manage your own setup

Page 19: Deploying Rails Applications

© ThoughtWorks, 2006 19

Advantages of VPS hosting

Entire CPU available when other users are idle.

Disk I/O usually faster than dedicated box (due

to RAID etc.)

Can take advantage of SANs if required.

Hosting company takes care of the VPS server

Fairly easy to scale VPS setup (just add more

VMs)

Page 20: Deploying Rails Applications

© ThoughtWorks, 2006 20

Monitoring Rails applications

Monit (http://www.tideslash.com/monit)

Process monitoring tool

Can monitor:

• HTTP server

• Processes

• Databases (MySQL and PostgreSQL)

Page 21: Deploying Rails Applications

© ThoughtWorks, 2006 21

Cron Jobs

Clear stale sessions

Database maintenance

Clear logs

Best practice: get Cron to call out to a script

Don't hardcode commands in the crontab

Makes it easy to test

Page 22: Deploying Rails Applications

© ThoughtWorks, 2006 22

Putting it all together

Can use Monit to create 'self healing' setup

PostgresQL

Nginx

Mongrel

Cron

Page 23: Deploying Rails Applications

© ThoughtWorks, 2006

http://nginx.net/

http://railsexpress.de/blog (performance tuning)

http://hostingfu.com (blog on hosting) http://www.slideshare.net/Georgio_1999/how-to-scale-your-web

-app/

(scaling Rails)

23

Additional Information

Page 24: Deploying Rails Applications

© ThoughtWorks, 2006

Thank You

http://blog.vivekprahlad.com/