when to use ruby on rails

31
When to use Ruby on Rails? Sytse Sijbrandij [email protected]

Upload: dosire

Post on 05-Dec-2014

50.382 views

Category:

Technology


0 download

DESCRIPTION

To advantages and disadvantages of the Ruby programming language and the Rails framework. Includes advise when to use it and comparisons to PHP.

TRANSCRIPT

Page 1: When To Use Ruby On Rails

When to use Ruby on Rails?

Sytse Sijbrandij

[email protected]

Page 2: When To Use Ruby On Rails

Contents• Ruby

– What is it?– Advantages– Disadvantages

• Rails– What is it?– Advantages– Disadvantages

• When to use it• Reusable best practices

Ruby Beach, Washington, U.S.Kevin Mc Neal

Page 3: When To Use Ruby On Rails

What is Ruby?

• A scripting language more powerful than

Perl and more object-oriented than Python.

• Invented in 1993 with inspiration from Perl, Phyton, Smalltalk, Eiffel, Ada, and Lisp.

• Designed for programmer productivity and joy instead of machine efficiency.

• Follows the principle of least surprise, the language should minimize confusion.

• It's easy to work with and to love Ruby.Yukihiro 'Matz' Matsumoto

Ruby's Architect

Page 4: When To Use Ruby On Rails

Ruby Advantages

• Elegant

• Powerful

• Readable

• Concise

Ruby and Diamond ringR. M. Rayner

Page 5: When To Use Ruby On Rails

class NewBowlingGame extends PHPSpec_Context{

private $_bowling = null;public function before(){

$this->_bowling = new Bowling;}

public function itShouldScore0ForGutterGame(){

for ($i=1; $i<=20; $i++) {$this->_bowling->hit(0);

} $this->spec($this->_bowling->score)->should->equal(0);}

}

describe Bowling dobefore(:each) do@bowling = Bowling.new

end

it "should score 0 for gutter game" do20.times { @bowling.hit(0) }@bowling.score.should == 0

endend

Ruby is Elegant

Page 6: When To Use Ruby On Rails

Ruby is Powerful

• Object-oriented (everything is an object)

• Dynamic (duck typing)

# Open Ruby's Time class and add a methodclass Timedef yesterdayself - 86400

endend

today = Time.now # => Thu Aug 14 16:51:50 +1200 2008yesterday = today.yesterday # => Wed Aug 13 16:51:50 +1200 2008

Page 7: When To Use Ruby On Rails

Ruby is Readable

• The code comments itself

• Leads to better naming practices

# An example example function for a photo camera programdef shutter_clickedcapture_image if @camera.on? and @camera.memory_available?

end

Page 8: When To Use Ruby On Rails

Ruby is Concise

• Very expressive language

• Less lines of code, higher productivity

-199.abs # 199"ruby is cool".length # 12"Your Mom".index("u") # 2"Nice Day!".downcase.split(//).sort.uniq.join # " !acdeiny"

say = "I love Ruby"say['love'] = "*love*"5.times { puts say }=> "I *love* Ruby" "I *love* Ruby" "I *love* Ruby" "I *love* Ruby" "I *love* Ruby"

Page 9: When To Use Ruby On Rails

Ruby Disadvantages

• Ruby is Slow

• Ruby is New

Ruby Fails Falls, Lookout Mountain, U.S.Oscar & L

Page 10: When To Use Ruby On Rails

Ruby is Slow

• About 10x slower than Java, 2x slower than PHP

All benchmarks, x64 Ubuntu, Intel Q6600 QuadComputer Language Benchmarks Game

Page 11: When To Use Ruby On Rails

Ruby is New

• Not many developers or customers

• No common IDE

– Most coders use the Mac text-editor Textmate

– IDEs: RadRails, RubyMine, 3rd Rail, Netbeans

• No common application server

– Passenger's Apache module has momentum

Page 12: When To Use Ruby On Rails

Evolution to web frameworks

Static Dynamic Integrated

From 1990 to 2009Time

Type of site

Tools

Business roleMarketing

• Brochure

• Advertising

Front office

• Communication

• Ordering

• Mailings

Back office

• Quotations

• Fulfillment

• Legacy systems

HTML editors:

Frontpage

Dreamweaver

PHP + MySQL:

Joomla

Drupal

Wordpress

Typo3

.Net

Sharepoint

Frameworks:

CakePHP (PHP)

Grails (Groovy)

Django (Phyton)

Ruby on Rails (Ruby)

Merb (Ruby)

Sanatra (Ruby)

Page 13: When To Use Ruby On Rails

What is ?

• Web application framework• Open Source (MIT license)• Based on a existing

application (Basecamp)• Provides common needs:

– Routing, sessions– Database storage– Business logic– Generate HTML/XML/CSS/Ajax– Testing

Creator of Ruby on RailsDavid Heinemeier Hansson

Page 14: When To Use Ruby On Rails

Who uses Rails

• Internally:

• Externally:

• style.mtv.com

• www.getsatisfaction.com

• www.basecamp.com

• www.yellowpages.com

• www.twitter.com

• www.yelloyello.nl

Page 15: When To Use Ruby On Rails

Rails Advantages

• Convention over configuration

• Don’t Repeat Yourself

• Object Relational Mapping

• Model View Controller

• Reuse of code

• Agile practices

• Security

Tay Rail Bridge, ScotlandRoss2085

Page 16: When To Use Ruby On Rails

Convention over Configuration

• Table and foreign key naming– Tables are multiples

(users, orders, etc.)

– Foreign key naming: user_id

• Default locations– MVC, Tests, Languages, Plugins

• Naming– Class names: CamelCase

– Files: lowercase_underscored.rb

Page 17: When To Use Ruby On Rails

Don’t repeat yourself

• Everything is defined in a single, unambiguous place

• Easier to find code– Only need to look once

– Can stop looking when found

– Well defined places for most items

• Much easier to maintain code– Faster to change

– Less inconsistency bugs

Page 18: When To Use Ruby On Rails

Model View Controller

• Model– Object relationships

(users, orders)

• Controller– Business logic

(perform a payment)

• View– Visual representation

(generate HTML/XML)

Page 19: When To Use Ruby On Rails

Model

• Contains validation and object methods

• Use 'fat' models and 'skinny' controllers to increase reuse of methods across controllers

class Order < ActiveRecord::Basehas_many :line_itemshas_one :userhas_one :email, :through => :user

validates_presence_of :uservalidates_numericality_of :amount

def purchaseself.purchase_time = Now

endend

Page 20: When To Use Ruby On Rails

View

• DSL languages

• Erb for ruby & html

• Haml improves on erb

• Textile for html

• Sass for css<div id='content'><div class='left column'><h2>Welcome to our site!</h2><p>

<%= print_information %></p>

</div><div class="right column"><%= render "sidebar" %>

</div></div>

#content.left.column%h2 Welcome to our site!%p= print_information

.right.column= render "sidebar"

Page 21: When To Use Ruby On Rails

Controller

• RESTful

– Better than SOAP

– Easy to understand

– Easy to debug

– Easy to cache

– Easy to prioritize

– No bottleneck

– HTML/XML/JSON

Method Resource Verb index /people GET show /people/12 GET create /people POST update /people/12 PUT delete /people/12 DELETE

GET /people/12.xml

def show@person =

Person.find(params[:id])respond_to do |wants|

wants.htmlwants.xml { render :xml

=> @person.to_xml }end

end

Page 22: When To Use Ruby On Rails

Object Relational Mapping

# Examples of finding recordsUser.find(:all)User.find(23).articlesUser.find_by_first_name('Johnny')User.order.find(:last).lines_items.count

Programming object Database row

#<User id: 1, login: "Sytse", email: "[email protected]", description: "<p>Sytse studied Management Science at the Universi...", avatar_id: 1, crypted_password: "b6675cab85b541a91e6d0

ORM Tools:-ActiveRecord-DataMapper-iBATIS

find

save

Page 23: When To Use Ruby On Rails

Re-use of code

• Gems and plugins, more then 1300

– For authentication, pagination, testing, etc.

• Git allows easy forking and merging

• Github website allows you to give back

• Acts as a portfolio

Page 24: When To Use Ruby On Rails

Agile practices

• Iterations (branch often, merge often)

• Test all the time (TDD, BDD)

Stories > Tests > Code > Continuous Integration

Story exampleFeature: Log-inIn order to view my profileAs a Registered memberI want to be required to log-in

Test exampleGiven /I am the registered member "quire"/ do@user = User.new({ :login => 'quire})@user.save!

end

Page 25: When To Use Ruby On Rails

Security

• Rails prevents SQL injection attacks– Attacher post in form: "some_title; DROP TABLE articles;"

– In bad code this can be injected:

"SELECT * FROM ARTICLES WHERE TITLE = $TITLE"

– Rails will be escape the input automatically:

@articles = Article.find(:all,

:conditions => [:title => params[:title]])

• Rails prevents Cross Site Scripting (XSS)– With html_escape in view: <%=h comment.body %>

Page 26: When To Use Ruby On Rails

Rails Disadvantages

• Rails is inefficient

• Rails is hard to deploy

Montparnesse 1895Jeff Mc Neill

Page 27: When To Use Ruby On Rails

Rails is inefficient

• Rails uses a lot of memory,

up to 150MB per instance

• Requires more application servers

• Where are your development constrains?

Resource Example application Rails

Man hours 2.200 hours / e22.000 1.000 hours / e10.000

Project duration 15 weeks of changes / e3.000 10 weeks / e2.000

Computing power 2 servers / e2.000 5 servers / e5.000

Total e27.000 e17.000

Page 28: When To Use Ruby On Rails

Rails is hard to deploy

• Harder than PHP, better with Passenger

• Lots of moving parts

– Rails, apps, gems, plugins

– Application server, webserver

• Deployment via scripts

– Via the Capistrano tool

– Easy to break something

• Deployment to multiple servers

Page 29: When To Use Ruby On Rails

When to use Ruby on Rails?

• New code base and DB

• High development speed

• Complex applications

• Web deployment

• Iterative projects

• Development is expensive

• Fixed price project

• Early adopter client/team

• Existing code and DB

• Low development speed

• Simple applications

• Client deployment

• Waterfall projects

• Deployment is expensive

• Hourly rate project

• Late majority client/team

Page 30: When To Use Ruby On Rails

Re-usable best practices

• Don't Repeat Yourself• 'Fat' model, 'skinny' controller• MVC framework

– CakePHP

• Integration testing– Selenium

• DSL's– Textile for markup

• Source code repository– GIT

• Project management– Github, Lighthouse, Basecamp

Recycle shirt by Brian Damage

Page 31: When To Use Ruby On Rails

Questions?

http://www.dosire.com/