next-generation ruby deployment with heroku

Post on 13-Jan-2015

5.717 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

RubyFoo 2009 presentation

TRANSCRIPT

Adam WigginsRubyFoo 2009

Next-Generation Ruby Deployment

with Heroku

Me: Adam Wiggins•RestClient•Sumo•Scanty•rush•Pony•Heroku co-founder

http://adam.blog.heroku.comhttp://github.com/adamwiggins

Part 1

My Journey

Living the dream:a career in video games

•Bad tools•Bad process

Game industry development:

•Bad tools•Bad process

Game industry development:

Compile & run: minutesRelease: years

Feedback Loop

“There must be a better way”

Career change

New tools

•Perl•Java•Apache•MySQL, PostgreSQL•Linux

New process

•Just-in-time compilation•Frequent deployments

Compile & run: secondsRelease: weeks

Feedback Loop

•Better tools•Fast feedback

Productivity!

•Better tools•Fast feedback

A decade of improvements:

•Agile•Web standards•Ruby•Web frameworks•Distributed revision control•Virtualization•Cloud

The Bad News

Deployment tools and process haven’t improved much in ten years.

Perl, circa 1999

•Apache (mod_perl)•Linux•MySQL•ssh•Colocated hardware

Ruby, circa 2009

•Apache (Passenger)•Linux•MySQL•Capistrano (automated ssh)•Virtual machine

It’s time for a revolution in web app deployment

Part 2

Heroku

Forget about servers

Forget about servers

It’s about your app.

Use Git to manage your deployments

The same thing you use to collaborate with other developers.

$ heroku create

Instant deployment!

$ heroku createCreated http://myapp.heroku.com/ | git@heroku.com:myapp.gitGit remote heroku added

Instant deployment!

$ heroku createCreated http://myapp.heroku.com/ | git@heroku.com:myapp.gitGit remote heroku added

$ git push heroku master

Instant deployment!

$ heroku createCreated http://myapp.heroku.com/ | git@heroku.com:myapp.gitGit remote heroku added

$ git push heroku masterCounting objects: 4, done.Total 4 (delta 0), reused 0 (delta 0)

Instant deployment!

$ heroku createCreated http://myapp.heroku.com/ | git@heroku.com:myapp.gitGit remote heroku added

$ git push heroku masterCounting objects: 4, done.Total 4 (delta 0), reused 0 (delta 0)

-----> Heroku receiving push-----> Sinatra app detected Compiled slug size is 4K-----> Launching.... done http://myapp.heroku.com deployed to Heroku

Instant deployment!

Compile & run: secondsRelease: seconds

Feedback Loop

$ heroku rake db:migrate(in /disk1/home/slugs/59315_629097a_a8c8/mnt)== CreateWidgets: migrating ==================================================-- create_table(:widgets) -> 0.0648s== CreateWidgets: migrated (0.0650s) =========================================

Rake

$ heroku consoleRuby console for myapp.heroku.com>> Widget.find(:first)=> #<Widget id: 1, name: "Hello, world", size: nil, created_at: "2009-09-24 01:16:40", updated_at: "2009-09-24 01:16:40">

Console

More features•Custom domains•Gem management•Database import/export•Cron•SSL•Background jobs•HTTP caching•Memcached

http://docs.heroku.com

Scale?

Scale?

•Provision servers•Install OS•Setup packages•Install app•mongrel_cluster.yml•httpd.conf

Scale?

•Provision servers•Install OS•Setup packages•Install app•mongrel_cluster.yml•httpd.conf

Go big!

Crank your dynos

Free for small apps;pay when you grow

“If you can make it here, you can make it anywhere”

(standard open source components, no lock-in)

Deployed Apps

0

9000

18000

27000

36000

Dec May Oct Apr Sep

Part 3

Heroku Internals

Built for the cloudfrom day one

Built for the cloudfrom day one

HTTP caching

HTTP caching

Routing mesh

Routing mesh

Slug compiler

Asynchronouscross-language messaging

Asynchronouscross-language messaging

Ruby!

http://heroku.com

top related