ruby on rails basics

20
Ruby On Rails Basics Amit Solanki http://amitsolanki.com

Upload: amit-solanki

Post on 18-May-2015

6.192 views

Category:

Education


1 download

DESCRIPTION

Basics of Ruby on Rails.

TRANSCRIPT

Page 1: Ruby On Rails Basics

Ruby On RailsBasics

Amit Solankihttp://amitsolanki.com

Page 2: Ruby On Rails Basics

Introduction

Web-application framework - includes everything needed to create database-backed web applications according to the Model-View-Control(MVC) pattern

Built on Ruby - Language of the year 2006

Extracted by David Heinemeier Hansson(DHH) from his work on Basecamp, a project management tool by 37signals

Released as open source in July 2004 - more than 1400 contributors

Page 3: Ruby On Rails Basics

ShowcaseMore at http://rubyonrails.org/applications

Page 4: Ruby On Rails Basics

Framework - Why do we need it?

Consider following Python Code:#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html\n"print "<html><head><title>Books</title></head>"print "<body>"print "<h1>Books</h1>"print "<ul>"

connection = MySQLdb.connect(user='mysql_user', passwd='mysql_pass', db='my_database')cursor = connection.cursor()cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall(): print "<li>%s</li>" % row[0]

print "</ul>"print "</body></html>"

connection.close()

Page 5: Ruby On Rails Basics

Framework - Why do we need it?What happens when multiple parts of your application need to connect to the database?- database-connecting code need to be duplicated in each individual CGI script.

Instead, we could refactor it into a shared function

Should a developer really have to worry about printing the “Content-Type” line and remembering to close the database connection?- this reduces programmer productivity and introduces opportunities for mistakes. These

setup- and teardown-related tasks would best be handled by some common infrastructure

What happens when this code is reused in multiple environments, each with a separate database and password?- some environment-specific configuration becomes essential

What happens when a Web designer who has no experience coding Python wishes to redesign the page?- one wrong character could crash the entire application. Ideally, the logic of the page — the

retrieval of book titles from the database — would be separate from the HTML display of the page, so that a designer could edit the latter without affecting the former.

Page 6: Ruby On Rails Basics

Framework - Why do we need it?The MVC Implementation:

# models.py (the database tables)from django.db import modelsclass Book(models.Model): name = models.CharField(max_length=50) pub_date = models.DateField()

# views.py (the business logic)from django.shortcuts import render_to_responsefrom models import Bookdef latest_books(request): book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html', {'book_list': book_list})

# urls.py (the URL configuration)from django.conf.urls.defaults import *import viewsurlpatterns = patterns('', (r'^latest/$', views.latest_books),)

# latest_books.html (the template)<html><head><title>Books</title></head><body><h1>Books</h1><ul>{% for book in book_list %}<li>{{ book.name }}</li>{% endfor %}</ul></body></html>

Page 7: Ruby On Rails Basics

Framework - Why do we need it?

The models.py file contains a description of the database table, represented by a Python class. This class is called a model. Using it, you can create, retrieve, update and delete records in your database using simple Python code rather than writing repetitive SQL statements

The views.py file contains the business logic for the page. The latest_books() function is called a view

The urls.py file specifies which view is called for a given URL pattern. In this case, the URL /latest/ will be handled by the latest_books() function. In other words, if your domain is example.com, any visit to the URL http://example.com/latest/ will call the latest_books() function

The latest_books.html file is an HTML template that describes the design of the page. It uses a template language with basic logic statements — e.g., {% for book in book_list %}

Page 8: Ruby On Rails Basics

Running Rails on your machine

Install ruby - http://ruby-lang.org/

Windows: One click installer

Linux: Installer tools such as apt-get and yum

Mac OS X: Macports

Best practice is to install by compiling from source

Install rubygems - http://rubyforge.org

Install rails gem - http://rubyonrails.org/download

gem install rails

may require sudo access on unix/linux based OS

Editors: TextMate, VIM, Emacs, jEdit, SciTE

IDE: RadRails, RubyMine, 3rd Rail, NetBeans, Komodo

Page 9: Ruby On Rails Basics

Features

Convention over Configuration

Don't Repeat Yourself (DRY)

Agile

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

Easy integration with features with AJAX and RESTful

Connects to most of the databases - just install DB driver

Latest stable release is 2.3 => 3.0 Coming soon

Rails is FUN

Page 10: Ruby On Rails Basics

Model-View-Controller Architecture

Controller

View Model Database

1.Browser sends request

2.Controller interacts with model

3.Controller invokes view

4.View renders next browser screen1

2

1

111

34

Page 12: Ruby On Rails Basics

Directory Structure.

|-- README Installation and usage information|-- Rakefile Build script|-- app Model, view and controller files go here| |-- controllers | |-- helpers| |-- models| |-- views

|-- config Configuration and database connection parameters| |-- boot.rb| |-- database.yml| |-- environment.rb| |-- environments| |-- initializers| `-- routes.rb|-- db Schema and migration information| |-- migrate|-- doc Autogenerated documentation|-- lib Shared code|-- log Log files produced by your application|-- public Web-acccessible directory. Your application runs from here|-- script Utility scripts|-- test Unit, functional, and integration tests, fixtures, and mocks|-- tmp Runtime temporary files|-- vendor Imported code `-- plugins

Page 13: Ruby On Rails Basics

Demo

Page 14: Ruby On Rails Basics

config/

Every environment has a database configuration in database.yml

Global configuration file - environment.rb

Individual configuration file under config/environments

production.rb

development.rb

test.rb

Easy to add custom environments

e.g. for a staging server create staging.rb

Start server by passing RAILS_ENV

ruby script/server RAILS_ENV=‘production’

mongrel_rails start

Page 15: Ruby On Rails Basics

script/

about

breakpointer

console

dbconsole

destroy

generate

plugin

runner

server

Page 16: Ruby On Rails Basics

Rake

db:migrate

doc:app

doc:rails

log:clear

rails:freeze:gems

rails:freeze:edge

rails:update

test

stats

Page 17: Ruby On Rails Basics

Some Quotes“Rails is the most well thought-out web development framework I’ve ever used. And that’s in a decade of doing web applications for a living. I’ve built my own frameworks, helped develop the Servlet API, and have created more than a few web servers from scratch. Nobody has done it like this before.”-James Duncan Davidson, Creator of Tomcat and Ant

“Ruby on Rails is a breakthrough in lowering the barriers of entry to programming. Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days.”-Tim O'Reilly, Founder of O'Reilly Media

“It is impossible not to notice Ruby on Rails. It has had a huge effect both in and outside the Ruby community... Rails has become a standard to which even well-established tools are comparing themselves to.”-Martin Fowler, Author of Refactoring, PoEAA, XP Explained

“What sets this framework apart from all of the others is the preference for convention over configuration making applications easier to develop and understand.”-Sam Ruby, ASF board of directors

Page 18: Ruby On Rails Basics

Some Quotes (contd.)

“Before Ruby on Rails, web programming required a lot of verbiage, steps and time. Now, web designers and software engineers can develop a website much faster and more simply, enabling them to be more productive and effective in their work.”-Bruce Perens, Open Source Luminary

“After researching the market, Ruby on Rails stood out as the best choice. We have been very happy with that decision. We will continue building on Rails and consider it a key business advantage.”-Evan Williams, Creator of Blogger, ODEO, and Twitter

“Ruby on Rails is astounding. Using it is like watching a kung-fu movie, where a dozen bad-ass frameworks prepare to beat up the little newcomer only to be handed their asses in a variety of imaginative ways.”-Nathan Torkington, O'Reilly Program Chair for OSCON

“Rails is the killer app for Ruby.”Yukihiro Matsumoto, Creator of Ruby

Page 19: Ruby On Rails Basics

Resources

guides.rubyonrails.org

weblog.rubyonrails.com

loudthinking.com

rubyinside.com

therailsway.com

weblog.jamisbuck.com

errtheblog.com

nubyonrails.com

planetrubyonrails.org

blog.caboo.se