Web-Frameworks: Ruby on Rails - wi1.uni- · PDF fileWeb-Frameworks: Ruby on Rails Thomas...

Preview:

Citation preview

Web-Frameworks:Ruby on Railsy

Thomas Jansing

05. Januar 2009

Software-Engineering Seminar (WS 2008/2009)

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

1

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

2

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

Web-Frameworks

Beispiele für Web-FrameworksNET.NET

DotNetNuke, ...

JAVAStruts, MyFaces, ...

Perl/PHPCatalyst, Symfony, ...

PythonDjangoDjango, ...

Und sonst?

4

Web-Frameworks

Ruby on Rails

Web-Framework: Rails

Programmier-/Skriptsprache: Ruby

5

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

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

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

8

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

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

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

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

Aufbau von Rails

13

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

Produktiver Einsatz

Wer setzt Ruby on Rails produktiv ein?

XING.com

Qype.com

Eins.de

Viele mehr...

15

XING.com

16

Qype.com

17

Eins.de

18

Produktiver Einsatz

Gemeinsamkeiten?

Web2.0/AJAX

Viel dynamischer Inhalt

Große „Marktplätze“

19

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

20

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

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

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

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

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

25

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

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

Live Demo

Web-Services und AJAX sind fester Bestandteil von RailsRails

Live-Demo

28

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

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

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

Agenda

Web-Frameworks

Ruby on Rails

Live-Demo

Erweiterungen

Fazit

32

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

Fazit

Vielen Dank für Ihre Aufmerksamkeit !

Fragen?

34

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

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

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

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

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)

Recommended