40
Ruby i Ruby on Rails Mateusz Drożdżyński

Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Ruby i Ruby on RailsMateusz Drożdżyński

Page 2: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Co to Ruby?

• Dynamiczny, obiektowy język programowania, stworzony przez Yukihiro Matsumoto

• Pojawił się w tym samym roku co Java (1995)

• Przejrzysta, prosta i intuicyjna składnia

• Wywodzi się z Lispa, Perla, Smalltalka

• Ma wiele cech wspólnych z Pythonem

• Metaprogramming

Page 3: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Prosta składnia

• Elementy składni zaczerpnięte z języków takich jak Perl, Lisp, itp.

• Kod zrozumiały dla każdego

• Kod w wielu przypadkach jest odzwierciedleniem zdań odpowiadających danej operacji

• Keep It Simple, Stupid!

Page 4: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Pełna obiektowość

• Obiektami w Ruby są:

• liczby

• napisy

• klasy (!)

• metody (!)

• ... a nawet sam dokument!

Page 5: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Hello World!

Page 6: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Klasy i metody

Page 7: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Blok, Proc i Lambda

• Wszystkie implementują przekazywanie bloków kodu i ich wykonywanie

• Jakie są podobieństwa?

• Jakie są różnice?

• Znane z innych języków, np.: Lambda z Lispa czy metody anionimowe z Javy

Page 8: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Instrukcje warunkowe

Page 9: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Wyrażenia regularne

Page 10: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Otwarte klasy, czyli jak dynamicznie ułatwiać sobie

życie

Page 11: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

• Moduł jako Namespace

• Dziedziczenie klas

• Moduł jako Mixin, czyli sposób na dziedziczenie po wielu klasach w Ruby

Moduły, dziedziczenie i Mixins

Page 12: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Ruby on Rails

• Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

• Łatwy i zrozumiały kod dzięki przejrzystej składni języka Ruby

• Łatwe programowanie API dzięki simply_restful

• Liczne rozszerzenia ułatwiające i przyspieszające implementację szablonowych rozwiązań

Page 13: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Części składowe

• Active Record

• Action Pack:

• Action Controller

• Action View

• Action Mailer

• Action Web Service

Page 14: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Schemat działania

Page 15: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Active Record, czyli Model w stylu RoR

• Automatyczne mapowanie tabel baz danych w obiekty

• Ułatwia zarówno proste, jak i bardziej skomplikowane operacje na bazie danych

• Obsługa wielu typów baz danych, w tym MySQL, PostgreSQL, SQLite czy bazy Oracle.

• Każdy model to klasa, można więc dopisywać do niego dowolne metody

Page 16: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Action Controller

• Odpowiedzialny za obsługę zapytań użytkownika/innej aplikacji

• Metody to akcje kontrolera

• Parametry żądania są przekazywane poprzez metodę params[]

• Zmienne instancji są przekazywane do widoku

• ApplicationController, czyli jak definiować wpólne metody dla wszystkich kontrolerów

• Filtry

Page 17: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Action View

• Łatwe tworzenie widoków, dzięki wbudowaniu w szablony języka Ruby

• Możliwość tworzenia kilku widoków dla jednej akcji:

• osobny widok renderuje XHTML

• inny XML dla zewnętrznej aplikacji

• a trzeci feed RSS dla użytkowników

• ... wszystko w jednej akcji!

Page 18: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Scaffolding, czyli generatory dla leniwych

• Generowanie:

• migracji

• modeli

• kontrolerów

• widoków

Page 19: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Tworzymy pierwszą aplikację

• Prywatny system zakładek a’la Del.icio.us

• CRUD

• Tagi

• Eksport do XML

• Wyszukiwarka

Page 20: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Polecenie `rails`, czyli jak zacząć

Page 21: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Konfiguracja bazy danych

Page 22: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Konsola, czyli bez czego nie można się objeśc

• Pozwala na wykonywanie dowolnego kodu Ruby

• Ładuje całe środowisko naszej aplikacji (modele, itd.)

• Pozwala na szybkie testowanie i debugging

• Umożliwia uruchamianie różnych środowisk (production, development)

• ./script/console

Page 23: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Generowanie części aplikacji

• ./script/generate migration ...

• ./script/generate model ...

• ./script/generate controller ...

Page 24: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Scaffolding

• Tworzymy model i migrację:

• ./script/generate model ...

• Tworzymy szkielet akcji (scaffold) dla modelu:

• ./script/generate scaffold ...

Page 25: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Simply Restful

• REST, czyli jak wykorzystać dodatkowe możliwości protokołu HTTP

• Metody GET, POST, PUT, DELETE i ich znaczenie w zwiększeniu semantyczności aplikacji

• Simply Restful, czyli REST w Ruby on Rails

Page 26: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

REST a mapowanie URL

Metoda HTTP URL w REST Akcja URL bez REST

GET /projects/1 show GET /projects/show/1

DELETE /projects/1 destroy GET /projects/destroy/1

PUT /projects/1 update POST /projects/1/update

POST /projects create POST /projects/create

Page 27: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Metody _path

Metoda _path Metoda HTTP URL Akcja

projects_path GET /projects index

projects_path(1) GET /projects/1 show

new_project_path GET /projects/new new

edit_project_path(1) GET /projects/1;edit edit

projects_path POST /projects create

project_path(1) PUT /projects/1 update

project_path(1) DELETE /projects/1 destroy

Page 28: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

REST a scaffolding

• Metoda ./script/generate scaffold_resource

• Generowane są:

• Migracje

• Model

• Kontroler

• Testy

• Fixtures

Page 29: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Walidacje

• Łatwy sposób na sprawdzanie poprawności wprowadzanych danych

• Definiowane w modelu, przez co są dostępne niezależnie od tego, gdzie się do danego modelu odwołujemy

• Przykładowe metody:

• validates_presence_of

• validates_uniqueness_of

• validates_numericallity_of

Page 30: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Relacje między modelami

• Dostępne relacje:

• has_one

• belongs_to

• has_many

• has_and_belongs_to_many

• has_many :through

Page 31: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Test-driven development, czyli jak pisać testy

• Zalety test-driven development

• Unikamy błędów w trakcie pisania aplikacji

• Koniec sprawdzania każdej funkcji aplikacji w przeglądarce

• Możemy uruchamiać testy w różnych środowiskach, więc przed każdym release można przetestować aplikację na serwerze produkcyjnym

Page 32: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Rodzaje testów

• Unit Testing

• sprawdzanie poprawności relacji pomiędzy modelami oraz walidacji

• sprawdzanie działania metod należących do logiki modelu

• Functional Testing

• sprawdzanie działania kontrolerów, odwołujemy się do aplikacji jak przeglądarka użytkownika

Page 33: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

• Integration Testing

• Performance Testing

• Klasa Benchmark

• Używanie Mock Objects

• Prosty sposób na testowanie aplikacji korzystających z zewnętrznych serwisów bez konieczności bezpośredniego łączenia z nimi

Page 34: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

• Integralne działanie ActiveResource

• Łatwe tworzenie zarówno aplikacji klienckich, jak i serwerowych

• Pełna integracja z ActiveRecord

• Niestety, nie jest to częścią Rails 1.2.x; dostępne jedynie w Rails Edge

Łączenie się z zewnętrzną aplikacją przez REST

Page 35: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Pisanie własnych zadań Rake

• Rake umożliwia pisanie własnych zadań (zestawów poleceń) dotyczących naszych aplikacji

• Przykładowe wbudowane metody:

• rake db:migrate

• rake test

• Tworzymy własne zadanie

Page 36: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Cache w Ruby on Rails

• Mechanizmy dostępne w Ruby on Rails:

• caches_page

• caches_action

• Fragment Cache

• A w drugą stronę...

• expire_page

• expire_action

• ActionController::Caching::Sweeper

Page 37: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Ruby on Rails od strony serwera

• Możliwe sposoby serwowania aplikacji Ruby on Rails:

• WEBrick

• CGI

• FastCGI

• mod_ruby

• Mongrel

Page 38: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Przykładowy przebieg zapytania - Mongrel

1. Przeglądarka WWW

2. Serwer HTTP (load balancing)

• Apache, Lighttpd, nginX, Pound, Pen

3. Jedna z n instancji serwera Mongrel

4. Ruby on Rails

Page 39: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

Capistrano, czyli Rails deployment made easy

• Capistrano umożliwia łatwą i kompleksową obsługę serwerów aplikacji i baz danych

• Przydatne polecenia:

• cap --apply-to /path Application

• cap setup

• cap deploy

• cap deploy_with_migrations

• http://manuals.rubyonrails.com/read/book/17

Page 40: Ruby i Ruby on Rails - IITiSmiszczak/files/slug/ruby.on.rails/...Ruby on Rails • Framework oparty o wzorzec Model-View-Controller, umożliwiający szybkie tworzenie aplikacji internetowych

acts_as_versioned, czyli jak wersjonować modele

• Pełna integracja z ActiveRecord

• Działa bez żadnej dodatkowej integracji z naszej strony

• Pozwala na wyświetlanie poprzednich wersji

• i cofanie się do nich

• ./script/plugin install acts_as_versioned