36

Ruby on Rails

  • Upload
    newbu

  • View
    152

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Ruby on Rails

Maja Skowro«ska i Paweª Placzy«ski

Sekcja j¦zyka Ruby

�ód¹, 24 marca 2010 r.

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 2: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Spis tre±ci

1 Wprowadzenie do Ruby on RailsWst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

2 Model warstwowyWarstwa kontroleraWarstwa modeluWarstwa widoku

3 Interesuj¡ce rozwi¡zaniaProces tworzenia projektuInne rozwi¡zania

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 3: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Czym jest Ruby on Rails?

Ruby on Rails (w skrócie: RoR) to framework przeznaczony doszybkiego tworzenia aplikacji webowych.

�(. . . ) zapewnia równowag¦ pomi¦dzy przyjemno±ci¡ z

programowania a produktywno±ci¡. Pozwala na pisanie

pi¦knego kodu preferuj¡c konwencj¦ nad kon�guracj¡.�

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 4: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Czym jest framework?

Aplikacja szkieletowa (framework, rama projektowa, szkielet) tostruktura wspomagaj¡ca tworzenie, rozwój i testowanie powstaj¡cejaplikacji. Z reguªy na framework skªadaj¡ si¦ programywspomagaj¡ce, biblioteki kodu ¹ródªowego i inne podobnenarz¦dzia. Zapewnia podstawowe mechanizmy i mo»e by¢wypeªniany wªa±ciw¡ tre±ci¡ programu.

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 5: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Czemu warto u»ywa¢ Ruby on Rails?

1 realizacja podstawowych funkcjonalno±ci aplikacji webowej;

2 programowanie obiektowe aplikacji webowych;

3 uªatwione testowanie i debugowanie;

4 �szybka p¦tla sprz¦»enia zwrotnego�;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 6: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Instalacja Ruby on Rails

http://rubyonrails.pl/pobierz

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 7: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Dokumentacja - internet

1 http://rubyonrails.org

2 http://rubyonrails.pl

3 http://railscasts.com

4 http://peepcode.com

5 http://www.nomedojogo.com/livro/carlosbrando-rubyonrails21_en.pdf

6 news://comp.lang.ruby

7 news://pl.comp.lang.ruby

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 8: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Dokumentacja - literatura

1 S. Holzner: Beginning Ruby on Rails

2 J. Zabieªªo: Ruby on Rails 2.1.

3 D. Thomas, D. H. Hansson, L. Breedt, M. Clark, J. D.Davidson, J. Gehtland, A. Schwartz: Agile programowanie w

Rails

4 M. Clark: Advanced Rails Recipes

5 Scott Raymond: Ajax on Rails

6 D. DeVires, M. Naberezny: Rails for PHP Developers

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 9: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

IDE wspomagaj¡ce RoR

1 TextMate (http://macromates.com/)

2 NetBeans (http://www.netbeans.org/)

3 Eclipse (http://www.eclipse.org/)

4 JEdit (http://www.jedit.org/)

5 SciTe (http://www.scintilla.org/SciTE.html)

6 RadRails (http://www.radrails.org/)

7 Arachno IDE (http://http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php)

8 Komodo (http://www.activestate.com/komodo/)

9 RDE (http://http://homepage2.nifty.com/sakazuki/rde_en/)

10 Vim (http://www.vim.org/) wraz z wtyczkami

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 10: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Model warstwowy MVC

1 Warstwa kontrolera - warstwa logiki aplikacji;

2 Warstwa modelu - warstwa dost¦pu do danych;

3 Warstwa widoku - warstwa UI;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 11: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Struktura katalogów

1 app - katalog z kodem projektu;

2 db - migracje i zarz¡dzanie baz¡ danych;

3 lib - biblioteki i moduªy automatycznieªadowane przez Rails;

4 public - katalog, w którym zamieszcznes¡ zasoby;

5 script - pomocnicze skrytpy Ruby'ego;

6 test - katalog z testami;

7 vendor - zewn¦trzne biblioteki potrzebnedo prawidªowego dziaªania projektu;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 12: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Moduªy

1 Rails - rdze« frameworka;

2 Active Support - implementacja helperów;

3 Active Record - obsªuga relacyjnych baz danych;

4 Action Mailer - wysyªanie i odbieranie maili;

5 Action Pack - obsªuga kontrolerów, szablonów, routera, sesjioraz �ltrów;

6 Active Resource - pozwala na zarz¡dzanie powi¡zaniamipomi¦dzy obiektami biznesowymi oraz internetowymiserwisami;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 13: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Narz¦dzie rake

Rake1 jest narz¦dziem do budowania elementów projektów w Rubyon Rails podobny w dziaªaniu do znanego make.Uruchamiaj¡c w katalogu projektu Rails rake -T wy±wietlonazostanie lista zada« dotycz¡ca projektu.

1http://rake.rubyforge.orgMaja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 14: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Stworzenie nowego projektu

rails nazwa_projektu

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 15: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Narz¦dzia w katalogu script

1 generate - skrypt przeznaczony do tworzenia kontrolerów,modeli, szablonów itp. ;

2 destroy - skrypt przeznaczony do usuwania elementówstworzonych przez skrypt generate;

3 console - skrypt uruchamiaj¡cy konsol¦ IRB w ±rodowiskuprojektu;

4 dbconsole - skrypt uruchamiaj¡cy konsol¦ DBMS bazydanych;

5 server - skrypt uruchamiaj¡cy serwer i aplikacj¦;

6 runner - skrypt wykonuje kod j¦zyka Ruby;

7 plugin - skrypt zarz¡dzaj¡cy pluginami;

8 about - skrypt wy±wietlajacy dane dotycz¡ce projektu;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 16: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Wst¦pArchitektura Ruby on RailsTworzenie projektów w RoR

Narz¦dzia katalogu script cd.

1 performance/benchmarker - testuje kilka razy wydajno±¢pewnej cz¦±ci kodu;

2 performance/profiler - pro�luje pojedyncz¡ instrukcj¦ w±rodowisku;

3 performance/request - skrypt ten pozwala wykona¢ wi¦ksz¡liczb¦ »¡da« dla adresu URI w aplikacji i otrzyma¢ szczegóäowyraport pro�lu kodu w wersji tekstowej oraz HTML;

4 process/inspector - wy±wietla informacje systemowe natemat dyspozytorów Rails przy u»yciu polecenia ps;

5 process/reaper - zamykanie, przeªadowywanie oraz ponowneuruchamianie dyspozytorów Rails;

6 process/spawner - uªatwia uruchamianie wi¦kszej liczbyprocesów wykonuj¡cych dyspozytor Rails;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 17: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Przykªad

Generacja kontrolera Przyklad

$ script/generate controller Przyklad

exists app/controllers/

exists app/helpers/

create app/views/przyklad

exists test/functional/

create app/controllers/przyklad_controller.rb

create test/functional/przyklad_controller_test.rb

create app/helpers/przyklad_helper.rb

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 18: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Przykªad cd.

app/controllers/przyklad_kontroller.rb

class PrzykladController < ApplicationController

end

test/functional/przyklad_controller_test.rb

require 'test_helper'

class NazwakontroleraControllerTest <

ActionController::TestCase

# Replace this with your real tests.

def test_truth

assert true

end

end

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 19: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Filtry

before_filter

Akcja wykonywana tu» przed realizacj¡ jakiejkolwiek akcji wkontrolerze.

after_filter

Akcja wykonywana po realizacji dowolnej akcji.

around_filter

Filtr ª¡cz¡cy w sobie cechy before_filter i after_filter.

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 20: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Routing

config/routes.rb

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

map.connect ':controller/:action/:id'

map.connect ':controller/:action/:id.:format'

end

Opcje routingu - przykªady

1 map.root :controller => 'home'

2 map.connect 'prefix/:name/:msg', :controller =>

'users', :action => 'msg'

# http://serwer/prefix/kowalski/hello

# params = { :controller => 'users', :action =>

'msg', :name => 'kowalski', :msg => 'hello' }

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 21: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Sesje

Ruby on Rails u»ywa mechanizmu sesji (przechowywania informacjio u»ytkowniku po stronie serwera) oraz ciasteczek (przechowywaniainformacji o u»ytkowniku po stronie klienta).Oba rozwi¡zania realizowane s¡ w RoR jak obsªuga tablicyasocjacyjnych (hash):

1 session - tablica dla realizacji sesji;

2 cookies - tablca dla realizacji ciasteczek;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 22: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Helpery

Wygl¡d helpera

module PrzykladHelper

end

Czym jest helper?

Helper jest moduªem rozszerzaj¡cym dziaªanie kontrolera,zazwyczaj uªatwiaj¡cym realizacj¦ funkcjonalno±ci.W helperach implementujemy metody, które nie s¡ stricte akcjami.

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 23: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Active Record

Active Record to narz¦dzie zarz¡dzania baz¡ danych w RoR.Zapewnia obsªug¦ niskopoziomowych zapyta« SQL, daj¡cprogrami±cie narz¦dzie obiektowe.

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 24: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

config/database.yml

SQLite

:adapter => �sqlite3�

:database => �nazwa_pliku�

MySQL

:adapter => �mysql�

:database => �nazwa_bazy�

:username =>�nazwa_u»ytkownika�

:password => �hasªo_u»ytkownika�

:socket => �±cie»ka_do_pliku_*.sock�

:encoding => �utf8�

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 25: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

config/database.yml

PostgreSQL

:adapter => �postgres�

:database => �nazwa_bazy�

:username =>�nazwa_u»ytkownika�

:password => �hasªo_u»ytkownika�

:host => �adres_hosta�

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 26: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Migracje

Stworzenie migracji

$ script/generate migration migracja

create db/migrate

create db/migrate/20100323205423_migracja.rb

Plik migracji (db/migrate/20100323205423_migracja.rb)

class Migracja < ActiveRecord::Migration

def self.up

end

def self.down

end

end

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 27: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Migracje - operacje

1 tworzenie tabel - create_table;

2 usuwanie tabel - drop_table;

3 ustawianie indeksów - add_index;

4 usuwanie indeksów - remove_index;

5 dodawanie kolumn w tabelach - add_ccolumn;

6 edycja kolumn w tabelach - change_column;

7 usuwanie kolumn z tabel - remove_column;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 28: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Operacje na danych

Tworzenie nowych rekordów

b1 = Book.new

b1.title = �tytuª�

b1.author = �autor�

b1.save

b2 = Book.new :title => �tytuª�, :author => �autor�

b2.save

Kasowanie rekordów

Book.delete 5 # kasuje rekord o id = 5

Book.delete [3,7,1] # kasuje rekordy o id równym 3, 7

oraz 1

Book.delete_all

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 29: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Operacje na danych cd.

Selekcja danych z rekordów

User.find_by_sql �zapytanie_sql�

User.count_by_sql �zapytanie_sql�

User.find :first, :conditions => ['id=?', 2]

User.find :all, :conditions => { :id => 2 }

User.all :conditions => { :id => 2 }

User.find 4

named_scope

Linijka w klasie Book:named_scope :avaliable, :conditions => { :status =>

'avaliable' }

pozwala u»y¢:Book.avaliable # SELECT * FROM books WHERE status =

'avaliable'

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 30: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Szablony

1 ERb;

2 Haml & Sass - http://haml.hamptoncatlin.com

3 Erubis - http://www.kuwata-lab.com/erubis

4 Liquid - http://www.liquidmarkup.org

5 Markaby - http://rubyforge.org/projects/markaby

6 MasterView - http://masterview.org

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 31: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Szablony - ERb

1 <%# tekst komentarza %>;

2 <% wykonywalna instrukcja %>;

3 <% wykonywalna instrukcja -%>;

4 <%= wstawiany tekst %>;

5 <%= wstawiany tekst -%>;

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 32: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Warstwa kontroleraWarstwa modeluWarstwa widoku

Przepªyw informacji pomi¦dzy szablonami

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 33: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Proces tworzenia projektuInne rozwi¡zania

Debugowanie

1 dzienniki (log) zapisuj¡ce dziaªalno±¢ serwisu;

2 interaktywna konsola;

3 tryby pracy - testowy, deweloperski oraz biznesowy;

4 tryb piaskownicy w dziaªaniu konsoli;

5 RubyDebug - http://rubyforge.org/projects/ruby-debug/

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 34: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Proces tworzenia projektuInne rozwi¡zania

Wdro»enie

1 Webrick (nie polecany);

2 Apache + Fusion passenger - http://www.modrails.com

3 Apache/Ngix + Mongrel - http://mongrel.rubyforge.org

4 Apache/Ngix + Thin - http://code.macournoyer.com/thin

5 Apache/Ngix + Ebb - http://ebb.rubyforge.org

6 inne . . . (patz http://rubyonrails.pl/wdrozenie)

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 35: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Proces tworzenia projektuInne rozwi¡zania

Ajax on Rails

1 tutorial do Ajaxa -http://www.w3schools.com/ajax/default.asp

2 tutorial do Ajax on Rails - http://tinyurl.com/ajaxonrails

3 (dla zaawansowanych) optymalizacja Ajax on Rails -http://tinyurl.com/optimizeajaxonrails

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails

Page 36: Ruby on Rails

Wprowadzenie do Ruby on RailsModel warstwowy

Interesuj¡ce rozwi¡zania

Proces tworzenia projektuInne rozwi¡zania

Wersje mi¦dzynarodowe

1 obsªuga standardowych metod kodowania znaków;

2 mo»liwo±¢ tªumaczenia szablonów oraz tekstów z bazy danych;

3 Rails I18n - http://github.com/svenfuchs/rails-i18n

4 GLoc - http://rubyforge.org/projects/gloc/

5 Globalize - http://globalize-rails.org/

Maja Skowro«ska i Paweª Placzy«ski Ruby on Rails