Ruby on Rails
  in a metro session...




                          Jesus Villar, jesus at virttoo.org
Über mich
Worum geht's heute?

• Was ist Ruby on Rails?
• Web Frameworks?
• Ruby on Rails Stack
• RoR Arbeitsweise
• Vorteile / Nachteile
Wer kennt bereits RoR?
Ruby on Rails is an open-source web
framework that's optimized for programmer
happiness and sustainable productivity.
It lets you write beautiful code by favoring
convention over configuration.



                                          http://rubyonrails.org/
Historie
• David Heinemeier
  Hansson für Basecamp
  Entwicklung in 2003
• 37signals ist Haupt-
  Sponsor
• MIT Lizenz
• 1.600 Contributors
Ruby on Rails is an open-source web
framework that's optimized for programmer
happiness and sustainable productivity.
It lets you write beautiful code by favoring
convention over configuration.



                                          http://rubyonrails.org/
Aber...




it's not ruby!
Webframeworks
• Fokussierung auf die Applikation -
  Produktivität
• Geschwindigkeit - "Time to market"
• Robustheit
• Wiederverwendung
• Standards (MVC, Objektrelationales
  Mapping, etc.)
Anforderungen an moderne
     Webframeworks
• Objektorientierung
• Templating
• AJAX
• Sicherheit und Robustheit
• Weiterentwicklung und aktive Community
Web Frameworks

   PHP          JAVA       Python      C#
  Zend         Spring      Django     ASP.net
 symfony       Struts    Turbogears
CodeIgniter   Tapestry      Zope

                   Ruby
                Ruby on Rails
Rock n' Roll!
           http://www.flickr.com/photos/stephenpoff/2920198159/
Ruby on Rails Stack

• Ruby
 • Gems
   • Rails
   • Active*
 • DB-Bindings (SQLite, MySQL, Postgres)
Paradigmen

• Model-View-Controller (MVC)
• DRY - Don't repeat yourself
• Convention over configuration
• REST
MVC

• Trennung Geschäftslogik von
  Nutzerschschnittstelle
• Vereinfacht Code-Pflege
• Inhaltliche Zuordung von Code zu
  Funktionalität
DRY

• Don't repeat yourself
• Redundanzen vermeiden bzw. reduzieren
• Änderungen nur an einer Stelle vornehmen
  Pragmatic Programmer (Andy Hunts, Dave Thomas)
Convention over configuration

• Namenskonventionen erleichtern die
  Anwendung
• Beispiel: Model singular, Datenbankname
  Plural, Controller Plural
• Außer der Datenbank Verbindung wird
  nichts konfiguriert
REST
• Jeder Ressource ein spezifischer URI
  zugeordnet
• Unterschiedliche Repräsentationen möglich
  (HTML oder XML)
• Zustandsloses Client/Server-Protokoll
  (HTTP)
• CRUD via PUT, GET, POST, DELETE HTTP
  Methoden
RoR flow chart

            Routing

WebServer             Controller   Model(s)
             View                             Database
Model
•   Hier werden Validierungen vorgenommen
    (validates_presence_of :name)

•   Durch Ableitung von ActiveRecord werden
    automatisch getter/setter für Attribute erzeugt

•   Konvention: Tabellennamen immer Plural vom
    Modellnamen

•   Relationen textuell beschrieben:

    •   1:1 has_one / belongs_to

    •   1:n has_many / belongs_to

    •   n:m has_and_belongs_to_many /
        has_and_belongs_to_many
Controller
•   Controller steuern Ablauf (Routing
    anpassbar)

•   Controller verwalten Modell

•   Jede Methode im Controller entspricht
    einer ausführbaren Action

•   View erhält Daten (für Vorbelegungen)
    über Instanzvariablen

•   Views werden über Konvention vom
    Controller angesprochen bzw. erzeugt

•   Verhalten der Controller kann mit Hilfe
    von Filtern beeinflusst werden (z.B. für
    Autorisierung, Authentifizierung)
View
•   Embedded Ruby (ERB) als Templating-
    Mechanismus

•   Datenzugriff über Instanzvariablen des
    Controllers

•   Inkludierung von Seitenteilen möglich (Partials)

•   Seitenweises blättern (Pagination)

•   Ajax

    •   Scriptaculous u. Prototype sind in Rails per
        Default integriert

    •   RJS (Rails Javascript) kapselt komplexe
        Funktionen
Scaffolding
• Schnelle Ergebnisse
• "Quick and dirty"
  > rails generate scaffold Post
  name:string title:string content:text
  > rake db:migrate
Scaffold Ergebnis
Vorteile / Nachteile
•   Sehr schnelle Ergebnisse v.a bei      •   Völlige Abhängigkeit vom Framework
    CRUD Applikationen
                                          •   Je spezieller die Applikation, je
•   nimmt Entwicklern Routinearbeiten         weniger Vorteile
    ab
                                          •   Performance & Skalierbarkeit
•   Automatische Verwendung von Best
    Practices                             •   Teilweise erheblicher Erstaufwand

•   Organisierte Struktur der Anwendung   •   Aktuell nicht sehr weit verbreitet
                                              (Hosting)
•   Code läuft auf verschiedenen
    Plattformen mit minimalen             •   Deployment ist kompliziert
    Anpassungen

•   Wartung der Software wird durch
    MVC, DRY, OOP einfach
Warum Ruby on Rails?

• Produktivitätskurve - Stunden, nicht
  Wochen
• Schnelle Ergebnisse und Kommunikation
• Eingebaute Datenbankpersistenz
• AJAX Integration
Warum kein RoR?
• Nicht compiliert
• DNA ist webframework, und z.B. kein EAI
• Richtig große Skalierung ist aufwendig
Fragen?

Danke!
www.virttoo.org
Backup
Environments /Umgebungen

• Applikationsname_development
  Entwicklung

• Applikationsname_test
  Testumgebung

• Applikationsname_production
  Produktion
Convention over configuration
•   Datenbanktabelle: libraries

•   Model: Library

•   Controller-Klassenname: LibrariesController

•   Controller-Dateiname: libraries_controller.rb

•   Controller Action: http://example.com/libraries/index

•   Test: LibraryTest

•   Test-Dateiname: LibraryTest

•   DB-Fixture: libraries.yml
Komponenten
• Action Pack
  • Action Controller
  • Action Dispatch
  • Action View
• Active Record
• Action Mailer
• ...
Applikation erstellen
rails new demoapp
...
Gemfile, README, Rakefile,
app, config, config.ru, db,
doc, lib, log, public, script,
test, tmp, vendor
Einen Controller
         erstellen
rails generate controller Greeting

create   app/controllers/greeting_controller.rb
invoke   erb
create   app/views/greeting
invoke   test_unit
create   test/functional/greeting_controller_test.rb
invoke   helper
create   app/helpers/greeting_helper.rb
invoke   test_unit
create   test/unit/helpers/greeting_helper_test.rb
Code-Beispiel Controller
Server starten
#demoapp: rails server
http://localhost:3000
ActiveRecord
•   Repräsentation des Schemas in Datenbank
    unabhängig

•   Änderungen am Schema via Migrationen
    (versioniert)

•   Rails kann mit Hilfe der Version automatisch Up-/
    Down-Migrationen der Datenbank vornehmen

•   Drei Datenbanken: Entwicklung, Test, Produktion
RoR bei Google
RoR vs. the Rest
Quellen
• http://www.rubyonrails.org/
• http://www.rubyonrails.de/
• http://www.slideshare.net/foobar2605/
  einfhrung-in-ruby-on-rails
• http://www.slideshare.net/raindoll/ruby-on-
  rails-einfhrung
Abstract
•   In den vergangenen Jahren hat sich ein neues
    Framework zur Entwicklung von Web-
    Anwendungen in den Vordergrund gebracht. Im
    Rahmen des Vortrags werden die
    Entwicklungsgeschichte, die Philosophie und die
    Möglichkeiten von RoR vorgestellt.

•   Was unterscheidet RoR von anderen Frameworks,
    was macht es erfolgreich, wo hat es seine
    Einschränkungen und warum polarisiert es die
    Entwicklergemeinde?

Ruby on Rails in a metro session

  • 1.
    Ruby on Rails in a metro session... Jesus Villar, jesus at virttoo.org
  • 2.
  • 3.
    Worum geht's heute? •Was ist Ruby on Rails? • Web Frameworks? • Ruby on Rails Stack • RoR Arbeitsweise • Vorteile / Nachteile
  • 4.
  • 5.
    Ruby on Railsis an open-source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration. http://rubyonrails.org/
  • 6.
    Historie • David Heinemeier Hansson für Basecamp Entwicklung in 2003 • 37signals ist Haupt- Sponsor • MIT Lizenz • 1.600 Contributors
  • 7.
    Ruby on Railsis an open-source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration. http://rubyonrails.org/
  • 8.
  • 9.
    Webframeworks • Fokussierung aufdie Applikation - Produktivität • Geschwindigkeit - "Time to market" • Robustheit • Wiederverwendung • Standards (MVC, Objektrelationales Mapping, etc.)
  • 10.
    Anforderungen an moderne Webframeworks • Objektorientierung • Templating • AJAX • Sicherheit und Robustheit • Weiterentwicklung und aktive Community
  • 11.
    Web Frameworks PHP JAVA Python C# Zend Spring Django ASP.net symfony Struts Turbogears CodeIgniter Tapestry Zope Ruby Ruby on Rails
  • 12.
    Rock n' Roll! http://www.flickr.com/photos/stephenpoff/2920198159/
  • 13.
    Ruby on RailsStack • Ruby • Gems • Rails • Active* • DB-Bindings (SQLite, MySQL, Postgres)
  • 14.
    Paradigmen • Model-View-Controller (MVC) •DRY - Don't repeat yourself • Convention over configuration • REST
  • 15.
    MVC • Trennung Geschäftslogikvon Nutzerschschnittstelle • Vereinfacht Code-Pflege • Inhaltliche Zuordung von Code zu Funktionalität
  • 16.
    DRY • Don't repeatyourself • Redundanzen vermeiden bzw. reduzieren • Änderungen nur an einer Stelle vornehmen Pragmatic Programmer (Andy Hunts, Dave Thomas)
  • 17.
    Convention over configuration •Namenskonventionen erleichtern die Anwendung • Beispiel: Model singular, Datenbankname Plural, Controller Plural • Außer der Datenbank Verbindung wird nichts konfiguriert
  • 18.
    REST • Jeder Ressourceein spezifischer URI zugeordnet • Unterschiedliche Repräsentationen möglich (HTML oder XML) • Zustandsloses Client/Server-Protokoll (HTTP) • CRUD via PUT, GET, POST, DELETE HTTP Methoden
  • 19.
    RoR flow chart Routing WebServer Controller Model(s) View Database
  • 20.
    Model • Hier werden Validierungen vorgenommen (validates_presence_of :name) • Durch Ableitung von ActiveRecord werden automatisch getter/setter für Attribute erzeugt • Konvention: Tabellennamen immer Plural vom Modellnamen • Relationen textuell beschrieben: • 1:1 has_one / belongs_to • 1:n has_many / belongs_to • n:m has_and_belongs_to_many / has_and_belongs_to_many
  • 21.
    Controller • Controller steuern Ablauf (Routing anpassbar) • Controller verwalten Modell • Jede Methode im Controller entspricht einer ausführbaren Action • View erhält Daten (für Vorbelegungen) über Instanzvariablen • Views werden über Konvention vom Controller angesprochen bzw. erzeugt • Verhalten der Controller kann mit Hilfe von Filtern beeinflusst werden (z.B. für Autorisierung, Authentifizierung)
  • 22.
    View • Embedded Ruby (ERB) als Templating- Mechanismus • Datenzugriff über Instanzvariablen des Controllers • Inkludierung von Seitenteilen möglich (Partials) • Seitenweises blättern (Pagination) • Ajax • Scriptaculous u. Prototype sind in Rails per Default integriert • RJS (Rails Javascript) kapselt komplexe Funktionen
  • 23.
    Scaffolding • Schnelle Ergebnisse •"Quick and dirty" > rails generate scaffold Post name:string title:string content:text > rake db:migrate
  • 24.
  • 25.
    Vorteile / Nachteile • Sehr schnelle Ergebnisse v.a bei • Völlige Abhängigkeit vom Framework CRUD Applikationen • Je spezieller die Applikation, je • nimmt Entwicklern Routinearbeiten weniger Vorteile ab • Performance & Skalierbarkeit • Automatische Verwendung von Best Practices • Teilweise erheblicher Erstaufwand • Organisierte Struktur der Anwendung • Aktuell nicht sehr weit verbreitet (Hosting) • Code läuft auf verschiedenen Plattformen mit minimalen • Deployment ist kompliziert Anpassungen • Wartung der Software wird durch MVC, DRY, OOP einfach
  • 26.
    Warum Ruby onRails? • Produktivitätskurve - Stunden, nicht Wochen • Schnelle Ergebnisse und Kommunikation • Eingebaute Datenbankpersistenz • AJAX Integration
  • 27.
    Warum kein RoR? •Nicht compiliert • DNA ist webframework, und z.B. kein EAI • Richtig große Skalierung ist aufwendig
  • 28.
  • 29.
  • 30.
  • 31.
    Environments /Umgebungen • Applikationsname_development Entwicklung • Applikationsname_test Testumgebung • Applikationsname_production Produktion
  • 32.
    Convention over configuration • Datenbanktabelle: libraries • Model: Library • Controller-Klassenname: LibrariesController • Controller-Dateiname: libraries_controller.rb • Controller Action: http://example.com/libraries/index • Test: LibraryTest • Test-Dateiname: LibraryTest • DB-Fixture: libraries.yml
  • 33.
    Komponenten • Action Pack • Action Controller • Action Dispatch • Action View • Active Record • Action Mailer • ...
  • 34.
    Applikation erstellen rails newdemoapp ... Gemfile, README, Rakefile, app, config, config.ru, db, doc, lib, log, public, script, test, tmp, vendor
  • 35.
    Einen Controller erstellen rails generate controller Greeting create app/controllers/greeting_controller.rb invoke erb create app/views/greeting invoke test_unit create test/functional/greeting_controller_test.rb invoke helper create app/helpers/greeting_helper.rb invoke test_unit create test/unit/helpers/greeting_helper_test.rb
  • 36.
  • 37.
    Server starten #demoapp: railsserver http://localhost:3000
  • 38.
    ActiveRecord • Repräsentation des Schemas in Datenbank unabhängig • Änderungen am Schema via Migrationen (versioniert) • Rails kann mit Hilfe der Version automatisch Up-/ Down-Migrationen der Datenbank vornehmen • Drei Datenbanken: Entwicklung, Test, Produktion
  • 39.
  • 40.
  • 41.
    Quellen • http://www.rubyonrails.org/ • http://www.rubyonrails.de/ •http://www.slideshare.net/foobar2605/ einfhrung-in-ruby-on-rails • http://www.slideshare.net/raindoll/ruby-on- rails-einfhrung
  • 42.
    Abstract • In den vergangenen Jahren hat sich ein neues Framework zur Entwicklung von Web- Anwendungen in den Vordergrund gebracht. Im Rahmen des Vortrags werden die Entwicklungsgeschichte, die Philosophie und die Möglichkeiten von RoR vorgestellt. • Was unterscheidet RoR von anderen Frameworks, was macht es erfolgreich, wo hat es seine Einschränkungen und warum polarisiert es die Entwicklergemeinde?