+ All Categories
Home > Technology > Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Date post: 13-May-2015
Category:
Upload: karel-minarik
View: 5,422 times
Download: 0 times
Share this document with a friend
Description:
Prezentace z přednášky na konferenci Webexpo
89
Efektivní vývoj webových aplikací v Ruby On Rails Karel Minařík
Transcript
Page 1: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikacív Ruby On RailsKarel Minařík

Page 2: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Karel Minařík

→ Absolvent FFUK, obor filosofie, diplomová práce o Adornově Estetické teorii

→ Web designer a vývojář na volné noze od roku 2000

→ V minulosti Flash vývojář, art director, informační architekt v internetových agenturách

→ Doktorand Studií nových médií na FFUK

→ (Opuštěný) blog o Ruby on Rails na http://blog.karmi.cz

→ KONTAKT: [email protected]

Page 3: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

http://data.karmi.cz/webexpo

Page 4: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Co je Ruby On Rails?1

Page 5: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Webový framework

Page 6: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Proč používat webový framework?

Page 7: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

„Toto je sněhová vločka. Vaše aplikace není jedna z nich. Většina věcí, které většina lidí dělá, není nijak unikátní. Vaše potřeby nejsou nijak ‚zvláštní‘.“

David Heinemeier Hansson, přednáška na konferenci Future Of Web Applications, únor 2006

Page 8: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE id = 1;

Page 9: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Page 10: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Ruby On RailsDjango

Zend FrameworkCakePHP

2004 2005 2006

Merb („lepší než Rails“)

Page 11: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Open source, licence MIT

Page 12: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

www.rubyonrails.org

Page 13: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Page 14: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Page 15: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Page 16: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Některé oblíbené nesmysly o Ruby a Rails

Ruby je „pomalé“

Nemužeme/nechceme se „učit nový programovací jazyk“

Rails má „špatnou podporu na web hostingu“

˚

Page 17: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Ruby On Rails je jedním z nejucelenějších popisů doporučených postupů pro moderní webový vývoja inspirací pro ostatní technologie a frameworky

Page 18: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

There’s no silver bullet!

Page 19: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Basecamp

Page 20: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Basecamp

Page 21: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Surviving the Big Rewrite: Moving YELLOWPAGES.COM to RailsRailsConf 2008, http://en.oreilly.com/rails2008/public/schedule/detail/2082

Scaling TwitterSilicon Valley Ruby Conference 2007, http://www.slideshare.net/Blaine/scaling-twitter

Page 22: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Page 23: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

— Jukihiro Macumoto (Matz)

Page 24: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Přednáška Ruby Design Principles, 2006 (včetně MP3 záznamu)

http://itc.conversationsnetwork.org/shows/detail1638.html

Page 25: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Ruby from Other Languageshttp://www.ruby-lang.org/en/documentation/ruby-from-other-languages/

Page 26: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Klíčové součásti Ruby On Rails

Page 27: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Přehled

Page 28: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Přehled

Model—View—Controller„Konvence má přednost před konfigurací“

Jádro frameworku:1) Objektově relační mapování ActiveRecord

2) Směrování HTTP požadavků na řídící prvky aplikace ActionController a –View 3) Webové služby typu REST ActiveResource

4) Odesílání e-mailů ActionMailer

5) Rozšíření Ruby ActiveSupport

Generátory kódu, Rake tasky, Capistrano, konzole aplikace, …

Rails pluginy a Ruby gemy

Page 29: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Page 30: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Model—View—Controller

Page 31: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Model–View–Controller

Page 32: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Adresářová struktura Rails aplikace

Model–View–Controller a „konvence má přednost před konfigurací“

controllers/articles_controller.rb

models/article.rb

views/articles/index, edit, new, atdviews/layouts/articles.html.erb

Page 33: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Generátory kódu

Page 34: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Generátory kódu

The Pragmatic Programmer: From Journeyman to Master, Andrew Hunt and David Thomas

Passive Code Generators Passive code generators save typing. They are basically parameterized templates, generating a given output from a set of inputs. Once the result is produced, it becomes a  full-fledged source file in the project; it will be edited, compiled, and placed under source control just like any other file. Its origins will be forgotten.

(str. 87)

Page 35: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

$ script/generate scaffold Person last_name:string date_of_birth:date

create app/models/person.rbcreate test/unit/person_test.rbcreate test/fixtures/people.ymlcreate db/migrate/20081007091729_create_people.rbcreate app/views/people/index.html.erbcreate app/views/people/show.html.erbcreate app/views/people/new.html.erbcreate app/views/people/edit.html.erb

create app/views/layouts/people.html.erbcreate app/controllers/people_controller.rbcreate test/functional/people_controller_test.rbcreate app/helpers/people_helper.rbroute map.resources :people

Generátory kódu

Page 36: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

ActiveRecord

Page 37: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Objektově relační mapování — ActiveRecord

Martin Fowler, Patterns of Enterprise Application Architecture (2002)

Page 38: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ID Name Surname E-mail1 John Smith [email protected] Susanna Reddick [email protected]

tabulka people

INSERT INTO people (name, surname, email) VALUES( 'John', 'Smith', '[email protected]' );SELECT * FROM people;SELECT * FROM people WHERE id = 1;SELECT * FROM people WHERE surname = 'Smith';

# ActiveRecord::Base.establish_connection ...Person.create(:name => 'John', :surname => 'Smith', :email => '[email protected]')Person.allPerson.find(1)Person.find_by_surname('Smith')

Objektově relační mapování — ActiveRecord

Page 39: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Person.all :order => 'last_name DESC'

Person.all :conditions => "administrator = 1"

Person.all(:conditions => [ "department = :department AND position = :position", {:department => params[:department], :position => params[:position]} ] )

Person.all :include => 'accounts'

Person.all :group => 'country'

Person.find_by_sql( "SELECT id AS complicated ..." )

Objektově relační mapování — ActiveRecord

Page 40: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

p = Person.find 1

p.first_name = 'Robert'

p.save

p.destroy

Objektově relační mapování — ActiveRecord

Page 41: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

class Account < ActiveRecord::Base validates_presence_of :account_number, owner_id validates_numericality_of :balance validates_length_of :password, :minimum=> 4 validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i validates_acceptance_of :terms_of_service, :on => 'create' end

ActiveRecord — Validace

http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001739&name=validates_presence_of

Page 42: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Callbacks

class Article < ActiveRecord::Base

after_save :clean_up_html after_destroy :audit_log

protected def clean_up_html self.body.gsub( ... ) end def audit_log audit_logger.info("Article #{self.title} has been removed by user #{current_user}") end end

http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001715&name=after_save

Page 43: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace

$ railroad -a -i -o full_models.dot -M

http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001491&name=has_many

Page 44: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace

class Project < ActiveRecord::Base belongs_to :project_manager end

create_table :projects do |t| t.string :title t.text :description t.integer :project_manager_id t.timestampsend

Page 45: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — Asociace

class Project < ActiveRecord::Base belongs_to :project_manager, :class_name => "User" has_many :tasksend

class User < ActiveRecord::Base has_many :projects has_many :tasks, :foreign_key => 'assigned_to'end

class Task < ActiveRecord::Base belongs_to :project belongs_to :user, :foreign_key => "assigned_to" end

Convention over configuration

Page 46: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveRecord — dočasné řešení

Objektové databáze

Page 47: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

ActionController

Page 48: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Routing — ActionController

Rails 1.1

Page 49: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Routing — ActionController

Rails 1.1

I CAN HAS BETTA ROUTING!

Page 50: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

— DHH, RailsConf 2007 Keynote, „The World Of Resources“

RESTful

Page 51: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

— DHH, RailsConf 2007 Keynote, „The World Of Resources“

Page 52: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActionController::Routing::Routes.draw do |map| map.resources :peopleend

GEThttp://www.example.com/peopleGEThttp://www.example.com/people/1POSThttp://www.example.com/peoplePUThttp://www.example.com/people/1DELETEhttp://www.example.com/people/1

Routing + Resources — ActionController

RESTful!

people_pathperson_path(1)

Rails 1.2.x

PeopleController#index()

PeopleController#show()

PeopleController#update()

PeopleController#destroy()

PeopleController#create()

Page 53: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

REST Representional State Transfer

REpresentational State Transfer

Mnohem více než „XML over HTTP“

Využití HTTP protokolu (GET, POST, PUT, DELETE)

S resourcem (noun) je možné manipulovat (verb): CRUD: CREATE — UPDATE — DELETE

Žádná informace o stavu resource není uchovávána na serveru

Resource má různé reprezentace (HTML, XML, graf, ...)

Každá reprezentace resource má unikátní URI (staff.html, staff.xml, staff.png)

Page 54: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

— DHH, RailsConf 2007 Keynote, „The World Of Resources“

Page 55: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

ActiveResource

Page 56: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

— DHH, RailsConf 2007 Keynote, „The World Of Resources“

Page 57: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveResource — ORM pro webové služby

class Person < ActiveResource::Base self.site = "http://username:[email protected]:3000/"end

# Expects a response of## <person><id type="integer">1</id><attribute1>value1</attribute1><attribute2>..</attribute2></person>## for GET http://api.people.com:3000/people/1.xml

ryan = Person.find(1)ryan = Person.new(:first => 'Ryan', :last => 'Daigle')ryan.save# => trueryan.id# => 2

Page 58: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActiveResource — ORM pro webové služby

class Person < ActiveResource::Base self.site = "http://username:[email protected]:3000/"end

Služba B

Služba A

Klient D Služba C„Mashup“ E

Page 59: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

ActionView

Page 60: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

@person = Person.find params[:id]

<h2>Jméno: <%= @person.name %></h2><p>E-Mail: <%= mail_to @person.email %></p>

<hr />

<%= link_to "Seznam lidí", people_path %>

display.html.erb

people_controller.rb

ActionView

Page 61: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

ActionView

Helpery pro formuláře, odkazy

<% form_for @person do |f| %> <%= f.text_field :name %> <%=f.datetime_select :date_of_birth %?<% end %>

<%= link_to @person.name, person_path(@person) %><a href="/person/show/1" ... />

Helpery pro Ajax, Scriptaculous, JavaScript

<%= link_to_remote "Skrýt", "update" => 'list', :url => { :action => 'hide' } %><a href ... onclick="new Ajax.Updater ... />

Page 62: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Automatizované testování

Page 63: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Proč psát testy?

Proč nepsat testy víme — není čas, nejsou peníze, …

Page 64: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace

Testy jsou nejmocnějším pomocníkem agilního vývoje

Testy jsou obrana „proti sobě samému“

Testy jsou obrana proti příšerám (legacy code)

Page 65: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

testovací data (fixtures)

testování controllerů a viewstestování modelů

Podpora pro automatizované testování aplikace v Rails

Podpora pro

Page 66: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Testovací data

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html

john: first_name: John last_name: Smith country: Great Britain department: Accounting position: Accountant administrator: true

robert: first_name: Roberto last_name: Callon country: Span department: Marketing position: Graphic Designer administrator: false

test/fixtures/people.yml

Page 67: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Test::Unit (standardní knihovna Ruby)

require 'test/unit'

class MyTest < Test::Unit::TestCase # def setup # end

# def teardown # end

def test_true_is_true assert_equal(true, true, 'Assertion was false.') end

end

Automatizované testování aplikace: Unit Testing

Page 68: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Automatizované testování aplikace: Logika aplikace

class PersonTest < ActiveSupport::TestCase

# Replace this with your real tests. def test_truth assert true end

end

test/unit/person_test.rb

Page 69: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

class ProjectsControllerTest < ActionController::TestCase

def test_should_get_index get :index assert_response :success assert_not_nil assigns(:projects) end

end

Automatizované testování aplikace: Prezentační vrstva

http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=C00000170&name=Assertions

test/functional/projects_controller_test.rb

Page 70: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

class ProjectsControllerTest < ActionController::TestCase

def test_should_get_index get :index # HTTP odpoved (tedy "200 OK", nikoliv 302, 404, 403, 500, ...) assert_response :success # Naplnena promenna @projects assert_not_nil assigns(:projects) # Prave *dva* projekty assert_equal 2, assigns(:projects).size # Pouzita sablona assert_template "index" # <title> stranky assert_select "title", "Projekty" # Fragment HTML kodu assert_tag :tag => 'li', :attributes => { :id => "project_#{projects(:babylon).id}", :class => 'in_progress' } end

end

Automatizované testování aplikace: Příklady

http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=C00000170&name=Assertions

Page 71: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Co jsme vynechali?

Page 72: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Databázové migrace

Nástroj Rake

Konzole aplikace (script/console)

Benchmarking a profilování kódu

Pluginy a rozšíření Rails

Rozšíření jazyka Ruby (1.day.ago, "cat".pluralize, ...)

Cachování

Internacionalizace (Lokalizace)

Procesy běžící na pozadí

Co jsme vynechali?

Page 73: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Deployment Rails aplikací

Page 74: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Deployment

„Deployment“ — Instalace a aktualizace kódu aplikace na serveru

„Model PHP“ → „Upload and forget“

Nástroj Capistrano:

Verzovaný kód aplikace (Subversion, Git)Aktualizace kódu aplikaceNávrat ke starší („funkční“) verziSpouštění příkazů na serveruMonitoring stavu aplikace a serveru

Efektivita

Synchronizace přes FTP.BAK, .OLD, ...

Page 75: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Deployment

Bez efektivního procesu deploymentu nelze vyvíjet agilně

Page 76: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

www.capify.org

$ cap -T$ cap deploy:migrations$ cap invoke 'cd /home/deployer/app/curent; grep -in error log/production.log'

Nástroj Capistrano pro efektivní deployment

Page 77: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

WebserverApache, Nginx, …

MongrelZpracovává požadavky na Rails Statické soubory

Čte web server rovnou z disku a obchází Mongrel i Rails

DatabázeBěží na stejném nebo jiném serveru

Load Balancer( )Struktura Rails aplikace běžící v produkčním prostředí

reverse proxy

Page 78: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Budoucnost? Phusion Passenger (mod_rails)

$ gem install passenger$ passenger-install-apache2-module

Page 79: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Rails hosting s mod_rails zdarma na zkoušku

Page 80: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

http://free.railshosting.cz

Page 81: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Další zdroje a informace

Page 82: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Editory a IDE pro Ruby a Rails

TextMate Mac OS X

NetBeans

Aptana RadRails

CodeGear 3rd Rail

Vim + rails.vim plugin

Page 83: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace

Peter Cooper, Beginning RubyApress 2007

Dave Thomas, David Heinemeier Hansson, et al.Agile Web Development With Ruby On Rails, 2nd editionPragmatic Bookshelf 2006 NEW říjen 2008

Page 84: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

Zdroje a informace

Why The Lucky Stiff, Poignant Guide to Rubyhttp://www.poignantguide.net/ruby/

Russ Olsen, Design Patterns in RubyPragmatic Bookshelf 2007

David Flanagan and Yukihiro Matsumoto, The Ruby Programming LanguagePragmatic Bookshelf 2007

Mike Naberezny and Derek DeVries, Rails for PHP DevelopersPragmatic Bookshelf, 2008

Page 85: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

KLÍČOVÉ SOUČÁSTI RUBY ON RAILS

http://weblog.rubyonrails.orgwww.rubyinside.comwww.railsinside.comwww.planetrubyonrails.comwww.railscasts.comwww.ruby-lang.org/en/documentation/quickstart

http://forum.rubyonrails.cz#rubyonrails (IRC kanál na IRCNet)www.csrug.cz

Zdroje a informace

www.railsforphp.comhttp://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-php

Page 86: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

Živá ukázka tvorby aplikace v Rails2

Page 87: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

www.tadalist.com od 37Signals

Page 88: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Efektivní vývoj webových aplikací v RubyOnRails

create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/mocks/development create test/mocks/test create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache

$ sudo gem install rails$ rails -v$ rails planner

Ukázka

Page 89: Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)

Děkuji!

www.karmi.cz


Recommended