I'm giving a presentation to the DWEEBS group at the University of Georgia on Thursday. These slides may change a little bit between now and then, but I wanted to get them up before I forgot. Feedback is welcome!
1 of 61
Downloaded 35 times
More Related Content
Welcome To Ruby On Rails
1. Welcome to
Ruby on Rails
Kevin Lawver | June 25, 2009
http://uplaya.com
Monday, June 22, 2009 1
2. Hi, I¡¯m Kevin Lawver
Chief Architect at Music Intelligence Solutions
- http://uplaya.com (it¡¯s a Rails app)
Worked at AOL for 13 years, launched two
public Rails apps. Spent a lot of time on
AOLserver using Tcl and Tomcat writing JSP¡¯s.
Just launched http://?cly.com with a friend as
an ¡°art project¡± (also on Rails)
Monday, June 22, 2009 2
3. What is Ruby?
Object-oriented
Interpreted
Expressive
¡°principle of least surprise¡±
Monday, June 22, 2009 3
4. ¡°They are focusing on machines. But in fact we
need to focus on humans, on how humans care
about doing programming or operating the
application of the machines. We are the masters.
They are the slaves.¡± -- Matz
Monday, June 22, 2009 4
5. Everything¡¯s an
Object
This confuses everyone at the beginning.
Everything in Ruby is an object.
There are no primitives, they¡¯re all objects!
Monday, June 22, 2009 5
6. What¡¯s Rails?
Web framework written by DHH in 2003 at
37signals for Basecamp
Takes most of the ¡°grunt work¡± out of building
web apps
MVC
¡°Optimized for programmer happiness and
sustainable productivity¡±
Monday, June 22, 2009 6
7. Why Use It?
Convention over con?guration
Quick prototyping - can turn into the ¡°real¡±
project without starting over
Convention makes it easy to share code and
quick to get started
Because it¡¯s Ruby, you can turn it into anything
you want
Monday, June 22, 2009 7
9. ActiveRecord
The ¡°M¡± in MVC
Rails¡¯ crown jewel - a great database abstraction
layer.
Makes it really easy to work with databases.
In Rails, your models should contain 95% of
your business logic.
Monday, June 22, 2009 9
10. ActionController
The ¡°C¡± in MVC
Handles routing requests and processing them.
In Rails, your controllers should be light
Monday, June 22, 2009 10
11. ActionView
The ¡°V¡± in MVC
Where you do all your HTML and most of
your XML.
I¡¯ve used a dozen different template systems
over the years and Rails¡¯ is by far my favorite.
Monday, June 22, 2009 11
12. ActiveResource
Rails¡¯ built-in support for RESTful API¡¯s
Makes it easy to do REST the right way
Provides a lot of the wrappers, error cases and
connection code you need to do RESTy stuff.
Monday, June 22, 2009 12
13. ActiveSupport
All the extensions to Ruby¡¯s base classes
A lot of ¡°glue¡± for JSON and other things that
don¡¯t belong in the other pieces
Monday, June 22, 2009 13
14. My Favorite Things
About Rails
I can go from idea to ¡°real¡± in hours instead of
days.
It¡¯s easy to refactor single pieces without
affecting the whole app.
Plugins solve major problems without
requiring rewrites (see cache money)
Community is helpful and responsive
Monday, June 22, 2009 14
15. Getting Started
I don¡¯t use Windows, so you¡¯re on your own
there.
If you use a Mac and have Leopard, you
already have Ruby and Rails.
Linux? There are dozens of tutorials for your
distro, don¡¯t worry.
Monday, June 22, 2009 15
16. The 20 Minute
Blog
Sorry if you¡¯re following along online, I¡¯m
heading to terminal now.
Monday, June 22, 2009 16
17. What we¡¯ll be doing
Create a new Rails app for our awesome new
blog
Build a model, controller and view for it
Look at some helpful gems and plugins
Make a feed for it
Talk a little about ActiveRecord callbacks
Monday, June 22, 2009 17
18. What we won¡¯t be
doing
Talking about tests (they¡¯re important, but I
hate writing them)
Spending a lot of time on con?guration
Monday, June 22, 2009 18
19. What we¡¯ll be doing
(redux)
Create a new Rails app for our awesome new
blog
Build a model, controller and view for it
Look at some helpful gems and plugins
Make a feed for it
Talk a little about ActiveRecord callbacks
Monday, June 22, 2009 19
20. Wasn¡¯t that fun?
now let¡¯s talk about myths!
Monday, June 22, 2009 20
21. Some Rails Myths
¡°Rails doesn¡¯t scale¡±
¡°Ruby (or Rails) is too slow¡±
¡°Rails locks you into doing it its way¡±
¡°X is better!¡± (where X = ¡°Python¡±, ¡°PHP¡±,
¡°Java¡± or whatever)
Monday, June 22, 2009 21
22. Myth: ¡°Rails
Doesn¡¯t Scale¡±
Monday, June 22, 2009 22
23. Maybe 3 Years Ago
Back then, we had to use FastCGI or Mongrel.
Now, though, we can use Phusion Passenger!
It¡¯s an Apache plugin that does a great job of
managing Rails instances.
And Ruby Enterprise Edition makes Rails use
less memory and run faster.
Brilliant!
Monday, June 22, 2009 23
24. Live-World Examples
uplaya.com handles tens of thousands of
requests a day on a couple tiny Amazon EC2
instances (we could do everything on one with
room to spare, but I like having backup).
?cly.com handles tens of thousands of requests
a day on a single quad core server - that¡¯s not
even breaking a sweat yet.
hundreds of other sites handle a lot more traf?c
with minimal hardware or fuss.
Monday, June 22, 2009 24
27. The Data Layer
Your database will fall over before your web
server does.
Optimize your connection, queries and indexes
Protect your database by using memcached
between your front-end and database
Monday, June 22, 2009 27
28. Cache, Cache, Cache
memcached is your friend
Disk-based caches don¡¯t work once you grow
beyond one server - same thing for in-memory
caches
Caching hides a world of programming sins,
and saves you from having to do ugly things
like sharding.
Monday, June 22, 2009 28
29. You Don¡¯t Want...
to be both read-heavy and write-heavy
to have complex queries that can¡¯t be cached
to have to do multiple selects on a single
request
Monday, June 22, 2009 29
30. The Most Important
Thing
is to launch! If you never launch, you¡¯ll never
have users. If you never have users, you¡¯ll
never have to scale.
Rails helps me get from nothing to launch
faster than anything else I¡¯ve tried.
It helps me get from launch to scale pretty
quickly as well.
Monday, June 22, 2009 30
31. Typical Rails Stack
Apache w/ Passenger
*x
MySQL Master memcached * y
Slave Readers * z
Writer
Monday, June 22, 2009 31
33. But, it¡¯s fast
enough for the
web.
Monday, June 22, 2009 33
34. For all of my sites...
No request takes longer than 1 second
On uPlaya, the average time per request is 217
milliseconds.
On Ficly, the average time per request is 165
milliseconds.
That¡¯s more than fast enough for the web.
Monday, June 22, 2009 34
35. The ¡°Slow¡± in Rails
Is the same slow anywhere else:
Database
The Internet
CPU, Disk or RAM
Monday, June 22, 2009 35
36. Those factors
affect everyone,
not just Rails
Monday, June 22, 2009 36
37. Performance Gotchas
Database indexes. If you¡¯re selecting or sorting
by a column, it should have an index! You
won¡¯t know you need them until it¡¯s too late.
Static assets. Set up a separate virtual host for
static stuff, or move them to a CDN. Don¡¯t
make Rails serve static stuff!
Selects. Tune your cache so you can average
zero reads per page view, if possible.
Monday, June 22, 2009 37
38. Myth: Rails
makes you do
things its way
Monday, June 22, 2009 38
45. Religious battles
over
programming
languages are
stupid.
Monday, June 22, 2009 45
46. Use what makes
you happy and
productive.
Monday, June 22, 2009 46
47. Why You Shouldn¡¯t
Use Rails
You have a legacy database that you can¡¯t
change. You could make it work with Rails, but
it probably wouldn¡¯t be much fun.
You¡¯re happy with what you¡¯ve got and hate
learning.
You don¡¯t ever talk to a database. Rails pretty
much is ActiveRecord, so if you¡¯re not using it,
you might be better off with something else.
Monday, June 22, 2009 47
48. Gems!
gem sources -a http://gems.github.com
Pagination: mislav-will_paginate
Faster URLs: pauldix-typhoeus
Twitterness: hayesdavis-grackle
Faster XML or HTML parsing: nokogiri or
hpricot
Monday, June 22, 2009 48
49. Rails Plugins FTW!
cache-money: a write-through cache for
ActiveRecord.
attachment_fu: great for handling uploads and
storing them on s3
smurf: automatic mini?cation of javascript and
css
openid_enabled: just what it says, painless
OpenId.
Monday, June 22, 2009 49
50. To Wrap Up
Rails is fun to work with. I¡¯m way more
productive now than I was before, happier too.
Rails is more ?exible than it gets credit for.
It¡¯s great for teams because it encourages good
behavior
Monday, June 22, 2009 50