40
Web-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Frameworks: Ruby on Rails - wi1.uni- · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Embed Size (px)

Citation preview

Page 1: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Frameworks:Ruby on Railsy

Thomas Jansing

05. Januar 2009

Software-Engineering Seminar (WS 2008/2009)

Page 2: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

1

Page 3: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

2

Page 4: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Anwendungen

Wer hat „Enterprise Application Integration“ gehört?

Bedeutung von Web-Anwendungen: Bekannt

Problem bei Web-Anwendungen: Heterogenität P i /Sk i t hProgrammier-/Skriptsprachen

Datenbanken

Web-ServerWeb Server

Betriebssysteme/Plattformen

Ziel von Web-Frameworks: Erstellen von Web-Anwendungen vereinfachen

3

Kombination von Komponenten zu einer Entwicklungsumgebung

Page 5: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Frameworks

Beispiele für Web-FrameworksNET.NET

DotNetNuke, ...

JAVAStruts, MyFaces, ...

Perl/PHPCatalyst, Symfony, ...

PythonDjangoDjango, ...

Und sonst?

4

Page 6: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Frameworks

Ruby on Rails

Web-Framework: Rails

Programmier-/Skriptsprache: Ruby

5

Page 7: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Allgemeine Konzepte & Paradigmen

Rapid Application Development (RAD)

R id W b D l t & R id P t t i Rapid Web Development & Rapid PrototypingAnforderungen möglichst schnell in ausführbaren Code umsetzen

Extreme Programming (XP)Problemlösung steht im VordergrundProblemlösung steht im Vordergrund

Kleine iterative Schritte mit Rückkopplung

Test-driven development (TDD)Tests werden vor der eigentlichen Implementierung geschrieben

Agile Softwareentwicklung

6

Page 8: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Allgemeine Konzepte & Paradigmen

Model-View-Controller (MVC) Architekturmuster

TrennungDatenmodel (Model)Datenmodel (Model)

Präsentationsschicht (View)

Steuerungsschicht (Controller)

Ziel: Web-Anwendung flexibel gestaltenWiederverwendungWiederverwendung

Geringerer Pflegeaufwand

Geprüfte und stabile Software

7

Page 9: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

8

Page 10: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Ruby

1995 von Yukihiro Matsumoto entwickelt

Obj kt i ti t P i /Sk i t hObjekt-orientierte Programmier-/Skriptsprache

Unterstützung für Prozedurale und Funktionale ProgrammierungProgrammierung

Dynamische Typisierung während der Laufzeit (Duck-Typing)(Duck-Typing)

„Principle of least surprise“

Syntax orientiert sich stark an natürlicher menschlicherSyntax orientiert sich stark an natürlicher menschlicher Sprache

Klassen Methoden (Java) Modelle Aktionen (Ruby)Klassen, Methoden (Java) Modelle, Aktionen (Ruby)

9

Page 11: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Ruby - Beispiel Modell: UserErbt von der ActiveRecord Basis-Klasse

class User < ActiveRecord::Base

d f lf th ti t (l i d)def self.authenticate(login,password)

user = self.find_by_login(login)

ifif user

if user.password != passwordUser-Objekt gefunden?Aktion

user = nil

end

end

user User-Objekt wird zurückgegeben

end

end

10

Page 12: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails

Von David Heinemeier Hansson entwickeltMitte 2004 Erste öffentliche VersionMitte 2004: Erste öffentliche Version

Ende 2005: Version 1.0

Ende 2007: Version 2.0Ende 2007: Version 2.0

Open Source Web-Framework (MIT-Lizenz)

PraxisnahPraxisnahBasiert auf Code & Erfahrungen bei der Entwicklung einer Projektmanagement Web-Plattform (basecamphq.com)

„Konvention über Konfiguration“Namenskonventionen vermeiden Konfigurationsaufwand

DRY P i i ( D ´ lf“)DRY-Prinzip („Don´t repeat yourself“)Vermeidung von Redundanz

11

Page 13: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails

Meta ProgrammierungA tomatische Generier ng on Programmcode ScaffoldingAutomatische Generierung von Programmcode Scaffolding

CRUD-Funktionalität der Modelle

Modelle, Views, Controller und Tests

Objekt-relationes Mapping (ORM)Konfigurationsaufwand sehr gering

DB-Migrationen Versionierung der DB-Schemata möglich

3 UmgebungenDevelopment

Test

ProductionProduction

12

Page 14: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Aufbau von Rails

13

Page 15: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Wozu Rails?

Rapid PrototypingZiel a Ent ickl ngsda er/Kosten red ierenZiel: u. a. Entwicklungsdauer/Kosten reduzieren

Wodurch? -> Agilität und Flexibilität

Fokus auf Implementierung der Geschäftslogik

kürzere Entwicklungs-Zyklen

Feedback der Nutzer soll schneller in die Entwicklung einfließen

14

Page 16: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Produktiver Einsatz

Wer setzt Ruby on Rails produktiv ein?

XING.com

Qype.com

Eins.de

Viele mehr...

15

Page 17: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

XING.com

16

Page 18: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Qype.com

17

Page 19: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Eins.de

18

Page 20: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Produktiver Einsatz

Gemeinsamkeiten?

Web2.0/AJAX

Viel dynamischer Inhalt

Große „Marktplätze“

19

Page 21: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

20

Page 22: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails

EntwicklungsumgebungOS Windo s Vista 32 bitOS: Windows Vista 32-bit

Datenbank: SQLite 3 (Ver. 3.6.4)

Ruby (Ver. 1.8.6-27 RC1)Ruby (Ver. 1.8.6 27 RC1)

Ruby-Gems (Paketverwaltung)Rails 2.1.1

SQLite3 Adapter 1.2.3

Mongrel Web-Server 1.1.5

Konfiguration?

Nicht notwendig!

21

Page 23: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails

Beispielanwendung: Pizza-Bestell-ServiceAdmin Pi a Ver alt ng (Anlegen Editieren Löschen)Admin Pizza-Verwaltung (Anlegen, Editieren, Löschen)

Kunde Bestellung (Anlegen)

Unterscheidung Admin, Kunde über Login-Funktionalität (Profil)Unterscheidung Admin, Kunde über Login Funktionalität (Profil)

Was erleichtert die Bestellung? Eine Pizza-Suche

Grundgedanke: Rapid Web Development!g p p(Anforderungen möglichst schnell in ausführbaren Code umsetzen)

Was wird benötigt?Modelle (Klassen)

Attribute

Assoziationen (Relationen) zwischen ModellenAssoziationen (Relationen) zwischen Modellen

UML Diagramm

22

g

Page 24: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

UML Diagramm

Orders_Pizzas

+name : string

Pizza

+delivery wish : text

Order+name : string+address : string+zip code : integer

User

1** *+name : string+price : decimal+ingredients : string

+delivery_wish : text p_ g+city : string+login : string+password : string

23

Page 25: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Live-Demo

1. Rails-Projekt erstellen“rails pizza-service”

2. Modell generieren“ruby script\generate scaffold modellname attribut:typ ...”

3. DB migrieren“rake db:migrate”

4 Testen 4. Testen “ruby script\server”

http://localhost:3000p

24

Page 26: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

25

Page 27: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Session-Handling

Session-HashVariable: sessionVariable: session

Speichert Objekte über mehrere Requests hinweg

Anwendung: User-Objekt, Warenkorb ...Anwendung: User Objekt, Warenkorb ...Bsp.: session[:user] = User.find_by_id(id)

Flash-HashVariable: flash

Speichert Objekte für zwei aufeinander folgende Requests

Anwendung: Fehlermeldungen, Bestätigungen ...Bsp.: flash[:error] = „Password is incorrect!“

Im View: <%= flash[:error] %>Im View: <%= flash[:error] %>

26

Page 28: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Validierung

Validationen werden im Modell definiert

B Pi M d ll ( \ d l \ i b)Bsp.: Pizza-Modell (app\models\pizza.rb)

# All d i Att ib t ü b d# Alle drei Attribute müssen angegeben werden

validates_presence_of :name, :price, :ingredients

# Das Attribut “Name” der Pizza soll eindeutig sein# Das Attribut Name der Pizza soll eindeutig sein

validates_uniqueness_of :name

# Das Attribut “Preis” soll positiv sein

validates_numericality_of :price, :on => :create,

:greater_than => 0, :message => "Price should be > 0."

27

Page 29: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Live Demo

Web-Services und AJAX sind fester Bestandteil von RailsRails

Live-Demo

28

Page 30: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Sicherheit in Rails

„SQL-Injection“

Person.find(:first, :conditions => “user = ‘#{params[:user]}’ ” + “and pw = #{p [ ]} p‘#{params[:password]}’”)

Keine Überprüfung!

Person.find(:first, :condition => [“user=? and pw=?”, user, pw])p , , p ])

Person.find_by_name_and_pw(:user], params[:password])

Implizite Überprüfung!

29

Page 31: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Sicherheit in Rails

„cross-site scripting“ (XSS)

<%= @einWert %>

Keine Überprüfung!

html_escape() Methode von Ruby für alle Variablen verwenden, die erst bei der Generierung der Views ausgewertet werden

<%=h @einWert %>

Kein Einschleusen von HTML-Code und/oder Skripten möglich

30

Page 32: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Performance

Langsamer alsJa a EE da keine VM orhanden (noch)Java EE, da keine VM vorhanden (noch)

Vergleichbar mitDjango (basiert auf Python)Django (basiert auf Python)

Besser alsSymfony (basiert auf PHP)Symfony (basiert auf PHP)

Caching/Load-Balancing etc. vorhandeng g

Umfangreiche Tools zur Performance-Optimierung g p gvorhanden

31

Page 33: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

32

Page 34: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Fazit

Heterogenität bei Web-Anwendungen

R b R il l W b F kRuby on Rails als Web-FrameworkRAD, XP, TDD, MVC als allgemeine Konzepte

Konvention über Konfiguration“ / DRY Prinzip als spezielle„Konvention über Konfiguration / DRY-Prinzip als spezielle Konzepte

Meta-Programmierung / ORM

Prototyp mit CRUD-Funktionalität

Online-Markplätze/Stadt-Portale als Beispiele für produktiven Einsatz

Mö li h V bMögliche VerbesserungenI18n (Thema der aktuellen Rails Versionen)

Ruby in einer VM? PerformanceRuby in einer VM? Performance

33

Page 35: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Fazit

Vielen Dank für Ihre Aufmerksamkeit !

Fragen?

34

Page 36: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails Verzeichnisstruktur

Verzeichnis Inhalt

app Alle wichtigen Bestandteile des MVC-Musters: Hilfs-, Kontroller- und Modell-pp g

Klassen, sowie sämtliche Views (*.html.erb)

config Konfigurationsdateien (z. B. database.yml)

db DB-Migrationsskripte, SQLite3 Datenbank-Datei (nach Anlegen)

doc Dokumente, die mit rdocs erstellt wurden

lib Zusätzliche Ruby-Bibliotheken/Erweiterungen

log Logfiles des WEBrick/Mongrel-Servers

public Öffentliches Wurzel-Verzeichnis des Web-Servers mit statischen Dateien (z. B.

Bilder, JavaScript, CSS, ...)

script Start-Skripte (z B Server-Start DB-Konsole Generatoren)script Start-Skripte (z. B. Server-Start, DB-Konsole, Generatoren)

test Test-Skripte, Unit-Tests, Funktionale Tests sowie Integrationstests

tmp Temporäre Dateien (z. B. Session-Dateien, Cache-Dateien)

35

tmp Temporäre Dateien (z. B. Session Dateien, Cache Dateien)

vendor Plug-Ins und andere Erweiterungen

Page 37: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Rails Tags

Tag Beschreibung

<% RUBY CODE %> Code wird ausgewertet, keine Ausgabe% _ % g g

<%- RUBY_CODE -%> Code wird ausgewertet, keine Ausgabe, unterdrückt <br>

<%= RUBY_CODE %> Code wird ausgewertet und als String ausgegeben_

<%=h RUBY_CODE %> Code wird ausgewertet, Resultat wird durch html_escape gefiltert

<%# RUBY_CODE %> Code wird nicht ausgewertet (Kommentar)

36

Page 38: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Web-Services in Rails

Version 1.0SOAP Web Ser icesSOAP Web-Services

Modul: Action Web Service

Ab Version 2.0Ab Version 2.0Übergang auf Representational State Transfer (REST)

RESTful Web-ServicesModul: Active Resource

Services vs. Resources

Modelle in Rails sind automatisch Ressourcen!

Manipulation durch HTTP-Requests POST, GET, PUT, DELETE

37

Page 39: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Templates

Templates befinden sich unter app\views\

D i T l t E iDrei Template-EnginesEmbedded Ruby (ERb) [*.html.erb]

HTML-Templates mit über Tags eingebettetem Ruby-CodeHTML Templates mit über Tags eingebettetem Ruby Code<%=h RUBY_CODE %>

XML [*.xml.erb]XML-Templates für Web-Services

Ruby JavaScript (RJS) [*.js.rjs]Übersetzt Ruby Code zur Laufzeit in JavaScriptÜbersetzt Ruby Code zur Laufzeit in JavaScript

Controller steuert Views (vgl. MVC-Muster)Render :action => „Template name“„ p _

Anstatt :action auch :template oder :file möglich

38

Page 40: Web-Frameworks: Ruby on Rails - wi1.uni-  · PDF fileWeb-Frameworks: Ruby on Rails Thomas Jansing 05. Januar 2009 Software-Engineering Seminar (WS 2008/2009)

Layouts

Layouts unter app\views\layouts\Wieder Kon ention statt Konfig ration“Wieder „Konvention statt Konfiguration“Für gesamte Anwendung: application.html.erb

Für einzelne Controller: controller.html.erb

CSS Einbindung: <%= stylesheet_link_tag 'pizza' %>

Statischer Inhalt befindet sich unter public\\public\stylesheets

pizza.css

public\imagespublic\images

public\javascripts script.aculo.us (AJAX-Framework)

39

Prototype (AJAX-Framework)