Ruby On Rails Einführung

82
Ruby on Rails Ruby on Rails http://reinholdweber.com [email protected]

description

Introduction to the Ruby on Rails Web Framework (German)

Transcript of Ruby On Rails Einführung

Page 1: Ruby On Rails Einführung

Ruby on Rails

Rubyon

Railshttp://reinholdweber.com – [email protected]

Page 2: Ruby On Rails Einführung

Ruby on Rails

Inhalt

1.Einführende Beispiele2.Ruby3.Rails4.Live Beispiel

Page 3: Ruby On Rails Einführung

Ruby on Rails

RubyInterpretierte, objektorientierte &dynamisch typisierte Skriptsprache

RailsFullstack MVC WebApplication Framework

Page 4: Ruby On Rails Einführung

Ruby on Rails

„ Makes

Phplook like

Assembler “Ruby IRC Channel

Page 5: Ruby On Rails Einführung

Ruby on Rails

„ Nachahmung ist die höchste Form der

Anerkennung “

Page 6: Ruby On Rails Einführung

Ruby on Rails

Rails Nachbildungen in PHP

solar Seagull

Zend Framework

symfonyCakePHP

Prado

ZooP

WACT

CodeIgniter

Page 7: Ruby On Rails Einführung

Ruby on Rails

LibraryModul, das eine bestimmte Funktionalität anbietet

eZComponents / PEAR

Plattform, auf der man seine Anwendung aufbauen kann

Ruby on Rails / CakePHP / .NET / Django

Framework

Page 8: Ruby On Rails Einführung

Ruby on Rails

BasecampTwitter Mephisto

MeasuremapOdeo

Highrise43 Places

Backpackshopify

Rails Anwendungen

Page 9: Ruby On Rails Einführung

Ruby on Rails

Rubyeine dynamische, freie Programmiersprache,

die sich einfach anwenden und produktiv einsetzen lässt.

Sie hat eine elegante Syntax, die man leicht lesen und schreiben kann.

Page 10: Ruby On Rails Einführung

Ruby on Rails

Ruby- Japan 1995, Yukihiro Matsumoto

- Open Source

- Mischung aus Perl, Smalltalk, Eiffel, Ada und Lisp

- Hohe Qualität der Bibliotheken

- Wenige aber hochwertige Literatur

Page 11: Ruby On Rails Einführung

Ruby on Rails

Ruby

charakteristika

Page 12: Ruby On Rails Einführung

Ruby on Rails

Ruby- Generisch, interpretiert, reflektiert, mit Garbage Collector

- Eher auf Menschen als auf Computer optimiert

- Mächtiger als Perl, objektorientierter als Python

- Alles ist ein Objekt, keine primitiven Datentypen

- Starke dynamische Typisierung

Page 13: Ruby On Rails Einführung

Ruby on Rails

Alles ist ein Objekt

String = String.new

5.times do puts „Hello World“

end

Hello WorldHello WorldHello WorldHello WorldHello World=> 5

Page 14: Ruby On Rails Einführung

Ruby on Rails

Alles ist ein Objekt

1.upto(100) { |i| puts i }

3.141.ceil

2.718.floor

123…100=> 1

=> 4

=> 2

Page 15: Ruby On Rails Einführung

Ruby on Rails

Alles ist ein Objekt

rand.to_s [2..10]

validates_each :href, :on => :create do |record, attr, value| begin uri = URI.parse(value) if uri.class != URI::HTTP record.errors.add(attr, 'Only HTTP protocol addresses can be used') end rescue URI::InvalidURIError record.errors.add(attr, 'The format of the url is not valid.') end end

8digit longrandom number

Page 16: Ruby On Rails Einführung

Ruby on Rails

Alles ist ein Objekt

class Auto def beschleunigen puts 'Brumm' endend auto1 = Auto.newauto1.beschleunigen

Brumm=> nil

Page 17: Ruby On Rails Einführung

Ruby on Rails

Alles ist ein Objekt

class GutesAuto < Auto def bremsen puts 'Quietsch' endend auto2 = GutesAuto.newauto2.beschleunigenauto2.bremsen

BrummQuietsch=> nil

Page 18: Ruby On Rails Einführung

Ruby on Rails

Ruby Syntaxa = [1, 'hi', 3.14, 1, 2, [4, 5]] a[2] # 3.14a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1]a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]

Page 19: Ruby On Rails Einführung

Ruby on Rails

PHP Ruby Gemeinsamkeiten

+ auch dynamisch typisiert

+ es gibt Klassen und Zugriffsmodifizierer(public, protected, private)

+ heredoc Syntax

- Exceptions wie in PHP 5

Page 20: Ruby On Rails Einführung

Ruby on Rails

PHP Ruby Gemeinsamkeiten

+ große Standardbibliothek

+ true und false wie in PHP, null = nil

+ einige Variablen beginnen mit $

+ String Interpolation „$foo is a $bar” --- ”#{foo} is a #{bar}”

Page 21: Ruby On Rails Einführung

Ruby on Rails

PHP Ruby Unterschiede

- hat strenge Typisierung to_s, to_i

- Strings, Zahlen, Arrays und Hashes sind Objekte Statt abs(-1) hier -1.abs- Klammern in Methodenaufrufen sind optional

- keine abstract oder interface Klassen

Page 22: Ruby On Rails Einführung

Ruby on Rails

Java Ruby Gemeinsamkeiten

+ Speicher wird von einem Garbage-Collector verwaltet + Werkzeuge zur Dokumentation: RDoc + Objekte sind stark getypt

+ es gibt Klassen und Zugriffsmodifizierer(public, protected, private)

Page 23: Ruby On Rails Einführung

Ruby on Rails

Java Ruby Unterschiede

- muss nicht kompiliert werden - verschiedene GUI Toolkits z.B. WxRuby - require statt import

- Klammern in Methodenaufrufen optionalget_books

Page 24: Ruby On Rails Einführung

Ruby on Rails

Java Ruby Unterschiede

- Alle Instanzvariablen sind privat, Zugriff nur über Methoden - Keine statische Typprüfung - keine Typdeklarationen notwendig

a = [1,2,3] statt int[] a = [1,2,3];

- keine Typumwandlung (Typecasting)

Page 25: Ruby On Rails Einführung

Ruby on Rails

Java Ruby Unterschiede

- Konstruktor heißt immer initialize anstatt Klassenname - Mixins anstelle von Interfaces - self anstatt this

- Unit-Testing noch einfacher

Page 26: Ruby On Rails Einführung

Ruby on Rails

Rails- Dänemark 2004, David Heinemeier Hansson

- Open Source MIT Lizenz

- 15 Core Entwickler

- Fullstack MVC WebFramework

- Wurde aus bestehender Anwendung extrahiert

Page 27: Ruby On Rails Einführung

Ruby on Rails

Ruby on Rails

philosophie

Page 28: Ruby On Rails Einführung

Ruby on Rails

Ruby on Rails

Die 1. Regel im Rails Club lautet:

Don‘t repeat yourself

Page 29: Ruby On Rails Einführung

Ruby on Rails

Ruby on Rails

Die 2. Regel im Rails Club lautet:

Don‘t repeat yourself

Page 30: Ruby On Rails Einführung

Ruby on Rails

DRY"Don't repeat yourself"-Prinzip (DRY):

Bsp: In Rails ist kein explizites Datenbankschema nötig, um mit der Datenbank zu kommunizieren, da die Datenbank direkt ausgewertet wird.

Page 31: Ruby On Rails Einführung

Ruby on Rails

MVC

Best practicesREST

Conventionover configuration

DRY OOPActive Record

CRUD

Page 32: Ruby On Rails Einführung

Ruby on Rails

MVCRails verwendet das Modell-View-Controller-Muster (MVC), welches die Schichten der Anwendung sauber in Verantwortungsbereiche aufteilt

Page 33: Ruby On Rails Einführung

Ruby on Rails

MVCDas Model bildet die zugrundeliegende Datenstruktur

Die View ist die Darstellung der Datenstruktur

Der Controller enthält die eigentliche Programmlogik

Page 34: Ruby On Rails Einführung

Ruby on Rails

MVC

Model

ControllerBrowser

View

Database

Page 35: Ruby On Rails Einführung

Ruby on Rails

MVC - ModelDas Model bildet die zugrundeliegende Datenstruktur

Die View ist die Darstellung der Datenstruktur

Der Controller enthält die eigentliche Programmlogik

Page 36: Ruby On Rails Einführung

Ruby on Rails

Active Record-ein Object-Relational Mapper (ORM)

Klasse Datenbanktabelle

Methoden Datenbankfelder

Objekt Datensatz

Page 37: Ruby On Rails Einführung

Ruby on Rails

Active RecordPatient

+name+email+date_of_birth+age+gender

Datenbank

Page 38: Ruby On Rails Einführung

Ruby on Rails

Active Record::Base#Findclass Patient< ActiveRecord::Baseend Patient.find(1)SELECT * FROM patients WHERE id = 1

Patient.countSELECT COUNT(*) AS count

Patient.find_by_name ‘Reinhold Weber‘SELECT * FROM patients WHERE name = ‚Reinhold Weber‘

Patient.find_by_date_of_birth ‘1985-07-08‘SELECT * FROM patients WHERE date_of_birth = ‚1985-07-08‘

Page 39: Ruby On Rails Einführung

Ruby on Rails

Modelsclass Patient< ActiveRecord::Baseend

class Encounter< ActiveRecord::Baseend

class Physician< ActiveRecord::Baseend

Page 40: Ruby On Rails Einführung

Ruby on Rails

Associationsclass Patient< ActiveRecord::Base has_many :encounters has_many :physicians, :through => :encounters end

class Encounter< ActiveRecord::Base belongs_to :patient belongs_to :physicianend

class Physician< ActiveRecord::Base has_many :encounters has_many :patients, :through => :encounters end

Page 41: Ruby On Rails Einführung

Ruby on Rails

Sensible Defaultsclass Patient < ActiveRecord::Base has_many :encounters, :class_name => 'Encounter', :foreign_key => 'patient_id' has_many :physicians, :through => encounters, :class_name => 'Physician', :foreign_key => 'physician_id'end

Page 42: Ruby On Rails Einführung

Ruby on Rails

Sensible Defaultsclass Encounter < ActiveRecord::Base belongs_to :patient, :class_name => 'Patient', :foreign_key => 'patient_id' belongs_to :physician, :class_name => 'Physician', :foreign_key => 'physician_id'end

Page 43: Ruby On Rails Einführung

Ruby on Rails

Sensible Defaultsclass Physician < ActiveRecord::Base has_many :encounters, :class_name => 'Encounter', :foreign_key => 'patient_id' has_many :patients, :through :encounters :class_name => 'Patient', :foreign_key => 'patient_id'end

Page 44: Ruby On Rails Einführung

Ruby on Rails

MVC - ViewDas Model bildet die zugrundeliegende Datenstruktur

Die View ist die Darstellung der Datenstruktur

Der Controller enthält die eigentliche Programmlogik

Page 45: Ruby On Rails Einführung

Ruby on Rails

View-Modul aus der ActionPack Bibliothek welches eine Antwort für den Client rendert

-entscheidet, welches Template und/oder Partial und Layout benutzt wird

-Templates benutzen helper Methoden um Links, Formulare und JavaScript zu generieren und Text zu formatiieren

Page 46: Ruby On Rails Einführung

Ruby on Rails

Templates-Vorlagen befinden sich in app/view/controller_name, .

-Z.B. die Vorlagen für start::PatientController befinden sich unter app/views/start/patient

- Vorlagen, die von mehreren Controllern benutzt werden befinden sich in app/views/shared

Page 47: Ruby On Rails Einführung

Ruby on Rails

Templates- rhtml - die am häufigsten vorkommende Variante für HTML. HTML Dateien mit eingebettetem Ruby, die die ERb Bibliothek benutzen

-rxml - Dateien mit Ruby code, die die Builder Bibliothek benutzen um XML zu generieren, wird normalerweise für RSS/Atom benutzt

- rjs - Ruby Code mit einer Rails spezifischen API, die JavaScript generiert. Wird benutzt für AJAX

Page 48: Ruby On Rails Einführung

Ruby on Rails

Partials- Partials sind Templates, die nur einen Teil einer Seite generieren wie z.B. einen Header oder Footer

-Partials helfen dabei Seitenelemente wiederzuverwenden

- funktionieren genauso wie Page Templates (views), laufen in derselben Umgebung und sind im selben Verzeichnis

-Dateinamen beginnen mit einem underscore _header

Page 49: Ruby On Rails Einführung

Ruby on Rails

Helpers- Helpers sind Ruby Module mit Methoden, die in den Templates verfügbar sind

-Helpers können Duplikate verhindern und minimieren den Code in den Templates

- Jeder Controller hat per default einen korrespondierenden helper unter app/helpers/controller_name_helper.rb

Page 50: Ruby On Rails Einführung

Ruby on Rails

View<html> <head> <title><%= @title %></title> </head> <body> <h1><%= @homepage_title %></h1>

<strong>Patient:</strong> <li>Name: <%= @patient.name %></li><%= render :partial => 'patient_details' %>

</body></html>

Page 51: Ruby On Rails Einführung

Ruby on Rails

MVC - ControllerDas Model bildet die zugrundeliegende Datenstruktur

Die View ist die Darstellung der Datenstruktur

Der Controller enthält die eigentliche Programmlogik

Page 52: Ruby On Rails Einführung

Ruby on Rails

Action Controller- Trennung von Business Logik & Präsentation

-Idealerweise sollte keinerlei Logik in der Präsentationsschicht sein

-Controller sind Ruby Klassen und befinden sich in app/controllers

Page 53: Ruby On Rails Einführung

Ruby on Rails

Action Controllerclass PatientController < ApplicationController def index @patient = Patient.find :first

@title = 'Patient Detail'@homepage_title = "Patient: #{@patient.name}"

endend

Page 54: Ruby On Rails Einführung

Ruby on Rails

Intelligente Architektur

Jede Rails-Anwendung hat eine identische Dateistruktur, es sind kaum Konfigurationsanpassungen nötig.

Page 55: Ruby On Rails Einführung

Ruby on Rails

Strukturapp/components/config/db/doc/lib/log/public/script/test/tmp/vendor/

ruby projekt1

Page 56: Ruby On Rails Einführung

Ruby on Rails

ScaffoldingMit wenigen Befehlen kann eine komplette Administrationsoberfläche zum Erstellen, Bearbeiten und Löschen von Datenbankeinträgen erstellt werden.

Rails erzeugt automatisch den Programm- und HTML-Code, der sukzessive um individuelle Funktionalität erweitert werden kann.

Page 57: Ruby On Rails Einführung

Ruby on Rails

Scaffolding

Klasse Datenbanktabelle

Methoden Datenbankfelder

Objekt Datensatz

Page 58: Ruby On Rails Einführung

Ruby on Rails

Konvention über Konfiguration

DB Tabelle ‚entries‘ Klasse ‚Entry‘

Page 59: Ruby On Rails Einführung

Ruby on Rails

MigrationsEin Weg das Datenbankschema zu entwickeln

Migrations benutzen eine datenbankunabhängige Ruby API

Migration Klassen erben von ActiveRecord::Migration

script/generate migration

Page 60: Ruby On Rails Einführung

Ruby on Rails

CRUDCreate: create, new

Read: find, find_by_<attr>

Update: save, update_attributes

Delete: destroy

Page 61: Ruby On Rails Einführung

Ruby on Rails

Schnelles Feedback

Ruby-Code wird zur Laufzeit interpretiert, Live-Änderungen an der Datenbankstruktur sind während der Entwicklung ohne Server-Neustart möglich.

Page 62: Ruby On Rails Einführung

Ruby on Rails

Web 2.0inklusive

Techniken wie AJAX und visuelle Effekte sind von Haus aus mit wenigen Zeilen nutzbar..

Ajax

Eye Candy

Page 63: Ruby On Rails Einführung

Ruby on Rails

Ruby on Rails

installation

Page 64: Ruby On Rails Einführung

Ruby on Rails

InstallationInstant Rails/ Locomotive Windows

MacPorts/ Quellen Mac

Quellen Linux

Page 65: Ruby On Rails Einführung

Ruby on Rails

Installation Ruby-rubyonrails.org/down

-Windows Installer runterladen, welcher Ruby und einige Extensions enthält

- Alle Komponenten installieren

Page 66: Ruby On Rails Einführung

Ruby on Rails

Installation Rails-Installierte Ruby Version ausgeben ruby -v

-Über RubyGem, das Paketverwaltungssystem von Ruby, Rails installieren gem install rails --include-dependencies

Page 67: Ruby On Rails Einführung

Ruby on Rails

Projekt anlegen-Neues Projekt erzeugen ruby> rails cookbook

-Server (WEBrick) starten ruby\cookbook> ruby script/server http://localhost:3000/

Page 68: Ruby On Rails Einführung

Ruby on Rails

Projekt konfigurieren-Datenbank Konfiguration cookbook/config/database.yml

-Server (WEBrick) neustarten ruby script/server http://localhost:3000/

Page 69: Ruby On Rails Einführung

Ruby on Rails

Projekt konfigurieren-Datenbank anlegen DB: cookbook Tb: recipes

-Model generieren ruby\cookbook> ruby script/generate model Recipe

Page 70: Ruby On Rails Einführung

Ruby on Rails

Projekt konfigurieren-Datenbank anlegen DB: cookbook Tb: recipes

- Conroller generieren ruby\cookbook> ruby script/generate controller Recipe

Page 71: Ruby On Rails Einführung

Ruby on Rails

RoR Editoren

SciTE3rdRail

Aptana

jEdit Eclipse

vim

emacsRadRails

Page 72: Ruby On Rails Einführung

Ruby on Rails

ROR Vorteile+ Sehr schnelle Ergebnisse v.a bei CRUD Applikationen

+ nimmt Entwicklern Routinearbeiten ab

+ Automatische Verwendung von Best Practices

Page 73: Ruby On Rails Einführung

Ruby on Rails

ROR Vorteile+ Organisierte Struktur der Anwendung

+ Viel Unterstützung durch freiwillige Supporter und Programmierer

+ Code läuft auf verschiedenen Plattformen mit minimalen Anpassungen

Page 74: Ruby On Rails Einführung

Ruby on Rails

ROR Vorteile+ 10-mal schnellere Ergebnisse als vergleichbare Java Framworks

+ Source-Code bleibt schlank – ca. 50% kleiner als ein vergleichbares PHP-Programm

+ Wartung der Software wird durch MVC, DRY, OOP viel einfacher, speziell bei großen Projekten

Page 75: Ruby On Rails Einführung

Ruby on Rails

ROR Vorteile+ Integriertes Test-Framework unterstützt automatisiertes Testen der Applikation. Dadurch können Fehlfunktionen von Anfang an minimiert werden

+ Web-Sicherheit ist integraler Bestandteil von Ruby on Rails

+ Web-2.0 (Ajax) fähig

Page 76: Ruby On Rails Einführung

Ruby on Rails

ROR Nachteile- Völlige Abhängigkeit vom Framework

- Je spezieller die Applikation, je weniger Vorteile

- Teilweise erheblicher Erstaufwand

- (noch) nicht sehr weit verbreitet (Hosting)

Page 77: Ruby On Rails Einführung

Ruby on Rails

ROR Nachteile- Deployment ist kompliziert

- Größtes Problem: Performance & Skalierbarkeit

- Teilweise erheblicher Erstaufwand

- (noch) nicht sehr weit verbreitet (Hosting)

Page 78: Ruby On Rails Einführung

Ruby on Rails

Lernen von Rails-Entwickeln nach Code Standards und Best Practices Convention over Configuration

- MVC, DRY Ansatz für Webanwendungen

- Test Driven Development

- Einsatz von OOP

Page 79: Ruby On Rails Einführung

Ruby on Rails

Ruby on Rails

ressourcen

Page 80: Ruby On Rails Einführung

Ruby on Rails

WWW- rubyonrails.com/

- wiki.rubyonrails.org/rails

- api.rubyonrails.org/

- (noch) nicht sehr weit verbreitet (Hosting)

Page 81: Ruby On Rails Einführung

Ruby on Rails

Bücher

-Agile Web Development with Rails – DHH

- Rails Recipes – Chad Fowler

- why's (poignant) guide to Ruby - http://poignantguide.net/ruby/

Page 82: Ruby On Rails Einführung

Ruby on Rails

Q & A