Johannes Gilger & Matthias Lederhofer der RWTH Aachen Network Operation Center 21. Juli 2010
Übersicht Ruby Rails Warum man Rails benutzen möchte Konzepte (DRY, MVC, Convention over Configuration) ActiveRecord - ORM Weiterführende Literatur, Software
Der Name Ruby on Rails
Der Name Ruby on Rails
Ruby Objektorientierte, interpretierte Sprache Dynamisch getyped Sehr einfache Syntax Ruby auch für sich betrachtet sehr interessant!
Ruby: Klassen class Customer attr_accessor :vorname, :nachname def initialize @vorname = @nachname = end def name return @vorname + + @nachname end end Keine Getter/Setter-Methoden schreiben: jojo = Customer.new jojo.vorname = Johannes
Ruby: Datentypen [0, 1, 2, hallo, 23.5] - Array %w(jan, Feb, Mar, Apr) - Stringarray { jojo => 24, matled => 25 } - Hash Alle Datentypen sind Objekte und besitzen ein Vielzahl praktischer Methoden
Ruby: Beispiele 2.times {puts Hello } => Hello => Hello RWTH Aachen.downcase.split( ).uniq.sort.join => acehnrtw array = [1, hi, 3.14] array.each { item puts item} => 1 => hi => 3.14 (1..10).collect { x x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Der Name Ruby on Rails
Rails Open-Source Web-Application Framework auf Grundlage von Ruby Aufgeteilt in mehrere Komponenten ActiveRecord - ORM (Datenbankanbindung) ActiveResource, ActionPack, ActiveSupport, ActionMailer 2004: Veröffentlichung, seitdem viele Veränderungen 2008: Rails-Entwicklung wird von SVN auf git umgestellt 2010: Rails 2.3.8 ist stable, Rails läuft auch auf Ruby 1.9 2010: Rails 3.0 RC4 aktuell, Release bald zu erwarten Bekannte Projekte unter Rails: GitHub, Twitter, Lighthouse, XING, etc.
Warum man Rails benutzen möchte Sehr schnelle Entwicklung von Webanwendungen Insbesondere das initiale Interface Unabhängigkeit von Datenbank-Engine Dadurch auch ein Sicherheitsvorteil. Manche Anwendungen können ohne ein einziges SQL-Statement geschrieben werden Vereinfachung von typischen Operationen Häufig wiederholte Dinge wie Links, Bilder, Stylesheets,... Vereinbarung bestimmter Konventionen Machen das Zusammenarbeiten einfacher Hilfreiche Werkzeuge zum Entwickeln und Debuggen
Buzzwords Database-Migrations (Änderungen an Datenbanken mit Code festhalten) Session/Cookie-Verwaltung, sonst nervig Lokalisation / Zeitzonen-Support Caching eingebaut Unit-Testing mit einfachen Tests AJAX (Asynchronous JavaScript and XML) stark vereinfacht Layouts / Partials (Teil-Layout einer Seite) Input Validation / XSS-Schutz eingebaut Viele Plugins (Authentication, Pagination, Tagging)
Convention over Configuration Rails trifft bestimmte Annahmen: Datenbank: Tabellen sind pluralisiert (Customer => customers). Jede Tabelle hat einen Primärschlüssel id (INT) Datenbank: Fremschlüssel heissen person_id Applikation: Aufteilung in MVC nach Ordnern, Dateien Resultat: Einschränkungen helfen. Grundlegende Entwicklungstätigkeiten werden sehr einfach.
MVC - Model, View, Controller
MVC - Model, View, Controller
ORM - Object Relational Mapper SQL: CREATE TABLE customers ( vorname VARCHAR(255), nachname VARCHAR(255)); app/models/customer.rb class Customer < ActiveRecord::Base def name return self.vorname + + self.nachname end end irb (ruby script/console) jojo = Customer.new(:vorname => Johannes, :nachname => Gilger ) puts jojo.name => Johannes Gilger
DRY - Don t Repeat Yourself CREATE TABLE customers ( vorname VARCHAR(255), nachname VARCHAR(255)); class Customer < ActiveRecord::Base def name return self.vorname + + self.nachname end end Wo kommen Customer.vorname und Customer.nachname her? => Customer ist Unterklasse von ActiveRecord::Base! Klasse: Tabelle (class Customer) Instanz: Zeile einer Tabelle (jojo = Customer.new) Attribut einer Instanz: Zelle (jojo.vorname = Johanna )
DRY - Models Validation in den Models, alles was in die Datenbank soll wird über das Model geleitet class Customer < ActiveRecord::Base validates_uniqueness_of :login, :on => :create validates_confirmation_of :password validates_length_of :login, :within => 3..40 validates_length_of :password, :within => 5..40 end
ActiveRecord - Assoziationen Assoziationen machen Arbeiten mit zusammenhängenden Daten sehr einfach class Order < ActiveRecord::Base belongs_to :customer end class Customer < ActiveRecord::Base has_many :orders end ich = Customer.find_by_vorname( Johannes ) ich.orders => [#order1, #order2,...]
ActiveRecord - Assoziationen
ActiveRecord - Assoziationen
ActiveRecord - Assoziationen
Der Controller Die Aufgaben des Controllers kann man unterteilen in 1. Daten aus einem oder mehreren Models holen (sprich: Instanzen) 2. Eventuell etwas mit diesen Daten machen 3. Daten an ein View weitergeben zur Anzeige
Trennung Controller & View Aufgaben: Controller: Programmlogik View: Darstellung / Layout Aufbau: Controller: Einfache Ruby-Klasse View: eruby, Embedded Ruby in HTML (wie z.b. PHP) Beispiel: <% 3.times do %> <b><%= Hello World %></b><br/> <% end %>
Controller & View app/controllers/people_controller.rb class PeopleController < ApplicationController def list @customers = Customer.find :all end end app/views/people/list.rhtml <table> <% @customers.each do customer %> <tr><td><%= customer.vorname %></td> <td><%= customer.nachname %></td></tr> <% end %> </table> Aufruf von http://localhost:3000/people/list
Rails - Anwendungsordner Neue Rails-Applikation mit: rails neuesprojekt app app controllers controllers helpers helpers models models views views config config db db doc doc lib lib log log public public script script test test tmp tmp vendor vendor
Rails - Anwendungsordner app controllers Controller, verbinden Models und Views helpers Hilfsmethoden die in mehreren Views benutzt werden models Models (entsprechend z.b. den Tabellen in der Datenbank) views HTML-Templates die zur Anzeige der Webseite benutzt werden config Anwendungs- & Datenbankkonfiguration public Statische öffentliche Dateien (Bilder, Stylesheets) script Rails Hilfsprogramme und Debugging-Tools
Rails - Entwicklungshilfen script console Ruby-Konsole, schnelles Testen von z.b. Models dbconsole Praktischer Shortcut, User/Passwort aus config/database.yml generate Allround-Generator für Grundgerüste (Controllers, Models, etc.) plugin Plugins installieren server Entwicklungs-Webserver auf localhost:3000 starten
Rails - Installation & Maintenance Ruby benutzt eigene Paketverwaltung: RubyGems Vorteile: Schnelle und einfache Installation auch kleiner Programme Programme ( Gems ) sind unabhängig von Distribution Parallele Installation verschiedener Versionen Befehle: gem list local - Installierte Gems anzeigen gem install <name> - Gem laden und installieren gem update - Installierte Gems updaten
Rails - Installation & Maintenance Rails benutzt Version mit der das Projekt erstellt wurde. Bei einem Update der Gems (rails, activerecord,...) wird nicht automatisch die neuste Version benutzt. Rails-Applikation updaten: In config/environment.rb muss RAILS_GEM_VERSION angepasst werden.
Rails - Lernen Ein Rails Tutorial benutzen Oftmals kleinere Anwendungen (Weblog, etc.) Bestehende Rails Projekte angucken (z.b. aus dem NOC) Nachverfolgen von Webseitenaufruf über Controller, Model, View Datenbankschema ausdenken und mit Scaffold-Generator Code erzeugen Ruby benutzen (für kleinere Tools, Parser, etc.) Vorsicht! Rails entwickelt sich sehr schnell und Best-Practices haben sich mehrfach geändert. Deshalb immer sicher stellen dass Dokumentation auf aktuellem Stand ist.
Rails im NOC Viele ähnliche Projekte, Code-Wiederverwendung häufig: RadiusAdmin Administration von Radius Servern/Usern DHCPAdmin Administration von DHCP-Servern / Hosts NOC-Störungsmeldungen Verwaltung in Rails Networks-Verwaltung Vorher flache XML-Datei ;) VoIPAdmin In der Entwicklung MoPS-Gastzugänge / MoPS-Weblogin
Rails - Alternativen Rails ist ein Framework von vielen: Symfony (PHP) http://www.symfony-project.org/ CakePHP (PHP) http://cakephp.org/ Django (Python) http://www.djangoproject.com/ Merb (Ruby), Merge mit RoR 3 http://www.merbivore.com/ Catalyst (Perl) http://www.catalystframework.org/ Viele neuere Frameworks verhalten sich wie Rails
Literatur zu Ruby & Rails Rails Guides - http://guides.rubyonrails.org/ Längere Tutorials, generell und über einzelne Komponenten Agile Web Development with Rails, 3rd Edition The Pragmatic Bookshelf, ISBN: 978-1-93435-616-6 Sehr ausführliches Rails-Buch mit Tutorial-Teil Rails API - http://api.rubyonrails.org/ Rails API Dokumentation Railscasts - http://railscasts.com/ Kurze Screencasts zu einzelnen Techniken Ruby Core rdoc - http://www.ruby-doc.org/core/ Klassen- und Library-Referenz http://www.ruby-doc.org/docs/programmingruby/ html/builtins.html (Alt) Programming Ruby, 2nd Edition The Pragmatic Bookshelf, ISBN: 978-0-9745-1405-5 Das Pickaxe-Book, sehr umfassend (mit Referenz)
The End Demorunde! Folgefragen können gerne an gilger@rz.rwth-aachen.de und lederhofer@rz.rwth-aachen.de gerichtet werden. Oder einfach vorbei schauen ;)