Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Einführung in Ruby on Rails
Johannes Gilger & Matthias LederhoferRechen- und Kommunikationszentrum der RWTH Aachen
Network Operation Center
21. Juli 2010
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Übersicht
I RubyI RailsI Warum man Rails benutzen möchteI Konzepte (DRY, MVC, Convention over Configuration)I ActiveRecord - ORMI Weiterführende Literatur, Software
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Der Name
Ruby on Rails
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Der Name
Ruby on Rails
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Ruby
I Objektorientierte, interpretierte SpracheI Dynamisch getypedI Sehr einfache Syntax
Ruby auch für sich betrachtet sehr interessant!
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Ruby: Klassen
class Customerattr_accessor :vorname, :nachname
def initialize@vorname = @nachname = ””end
def namereturn @vorname + ” ” + @nachnameendend
Keine Getter/Setter-Methoden schreiben:
jojo = Customer.newjojo.vorname = ”Johannes”
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
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 Vielzahlpraktischer Methoden
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
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]
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Der Name
Ruby on Rails
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails
I Open-Source Web-Application Framework auf Grundlagevon Ruby
I Aufgeteilt in mehrere KomponentenI ActiveRecord - ORM (Datenbankanbindung)I ActiveResource, ActionPack, ActiveSupport, ActionMailer
I 2004: Veröffentlichung, seitdem viele VeränderungenI 2008: Rails-Entwicklung wird von SVN auf git umgestelltI 2010: Rails 2.3.8 ist stable, Rails läuft auch auf Ruby 1.9I 2010: Rails 3.0 RC4 aktuell, Release bald zu erwarten
I Bekannte Projekte unter Rails:I GitHub, Twitter, Lighthouse, XING, etc.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Warum man Rails benutzen möchte
I Sehr schnelle Entwicklung von WebanwendungenInsbesondere das initiale Interface
I Unabhängigkeit von Datenbank-EngineDadurch auch ein Sicherheitsvorteil. MancheAnwendungen können ohne ein einziges SQL-Statementgeschrieben werden
I Vereinfachung von typischen OperationenHäufig wiederholte Dinge wie Links, Bilder, Stylesheets, . . .
I Vereinbarung bestimmter KonventionenMachen das Zusammenarbeiten einfacher
I Hilfreiche Werkzeuge zum Entwickeln und Debuggen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Buzzwords
I Database-Migrations (Änderungen an Datenbanken mitCode festhalten)
I Session/Cookie-Verwaltung, sonst nervigI Lokalisation / Zeitzonen-SupportI Caching eingebautI Unit-Testing mit einfachen TestsI AJAX (Asynchronous JavaScript and XML) stark
vereinfachtI Layouts / Partials (Teil-Layout einer Seite)I Input Validation / XSS-Schutz eingebautI Viele Plugins (Authentication, Pagination, Tagging)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Convention over Configuration
Rails trifft bestimmte Annahmen:
I Datenbank: Tabellen sind pluralisiert (Customer =>customers). Jede Tabelle hat einen Primärschlüssel ”id”(INT)
I Datenbank: Fremschlüssel heissen person_idI Applikation: Aufteilung in MVC nach Ordnern, Dateien
Resultat: Einschränkungen helfen. GrundlegendeEntwicklungstätigkeiten werden sehr einfach.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
MVC - Model, View, Controller
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
MVC - Model, View, Controller
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
ORM - Object Relational Mapper
SQL:CREATE TABLE customers (”vorname” VARCHAR(255),
”nachname” VARCHAR(255));
app/models/customer.rbclass 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”
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
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”)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
DRY - Models
Validation in den Models, alles was in die Datenbank soll wirdüber das Model geleitet
class Customer < ActiveRecord::Basevalidates_uniqueness_of :login, :on => :createvalidates_confirmation_of :passwordvalidates_length_of :login, :within => 3..40validates_length_of :password, :within => 5..40
end
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
ActiveRecord - Assoziationen
Assoziationen machen Arbeiten mit zusammenhängendenDaten sehr einfach
class Order < ActiveRecord::Basebelongs_to :customerend
class Customer < ActiveRecord::Basehas_many :ordersend
ich = Customer.find_by_vorname(”Johannes”)ich.orders
=> [#order1, #order2, ...]
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
ActiveRecord - Assoziationen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
ActiveRecord - Assoziationen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
ActiveRecord - Assoziationen
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Der Controller
Die Aufgaben des Controllers kann man unterteilen in1. Daten aus einem oder mehreren Models holen (sprich:
Instanzen)2. Eventuell etwas mit diesen Daten machen3. Daten an ein View weitergeben zur Anzeige
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Trennung Controller & View
Aufgaben:
I Controller: ProgrammlogikI View: Darstellung / Layout
Aufbau:
I Controller: Einfache Ruby-KlasseI View: eRuby, Embedded Ruby in HTML (wie z.B. PHP)
Beispiel:<% 3.times do %><b><%= ”Hello World” %></b><br/>
<% end %>
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Controller & View
app/controllers/people_controller.rbclass PeopleController < ApplicationControllerdef list@customers = Customer.find :allendend
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
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Anwendungsordner
Neue Rails-Applikation mit: rails neuesprojektappcontrollershelpersmodelsviewsconfigdbdocliblogpublicscripttesttmpvendor
appcontrollershelpersmodelsviewsconfigdbdocliblogpublicscripttesttmpvendor
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Anwendungsordner
appcontrollersController, verbinden Models und ViewshelpersHilfsmethoden die in mehreren Views benutzt werdenmodelsModels (entsprechend z.B. den Tabellen in der Datenbank)viewsHTML-Templates die zur Anzeige der Webseite benutzt werden
configAnwendungs- & Datenbankkonfiguration
publicStatische öffentliche Dateien (Bilder, Stylesheets)
scriptRails Hilfsprogramme und Debugging-Tools
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Entwicklungshilfen
scriptconsoleRuby-Konsole, schnelles Testen von z.B. ModelsdbconsolePraktischer Shortcut, User/Passwort aus config/database.ymlgenerateAllround-Generator für Grundgerüste (Controllers, Models, etc.)pluginPlugins installierenserver
Entwicklungs-Webserver auf localhost:3000 starten
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Installation & Maintenance
Ruby benutzt eigene Paketverwaltung: RubyGems
Vorteile:I Schnelle und einfache Installation auch kleiner ProgrammeI Programme (”Gems”) sind unabhängig von DistributionI Parallele Installation verschiedener Versionen
Befehle:I gem list −−local - Installierte Gems anzeigenI gem install <name> - Gem laden und installierenI gem update - Installierte Gems updaten
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Installation & Maintenance
Rails benutzt Version mit der das Projekt erstellt wurde. Beieinem Update der Gems (rails, activerecord, ...)wird nicht automatisch die neuste Version benutzt.
Rails-Applikation updaten:
In config/environment.rb muss RAILS_GEM_VERSIONangepasst werden.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Lernen
I Ein Rails Tutorial benutzenOftmals kleinere Anwendungen (Weblog, etc.)
I Bestehende Rails Projekte angucken (z.B. aus dem NOC)Nachverfolgen von Webseitenaufruf über Controller,Model, View
I Datenbankschema ausdenken und mit Scaffold-GeneratorCode erzeugen
I Ruby benutzen (für kleinere Tools, Parser, etc.)
Vorsicht!Rails entwickelt sich sehr schnell und Best-Practices habensich mehrfach geändert. Deshalb immer sicher stellen dassDokumentation auf aktuellem Stand ist.
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails im NOC
Viele ähnliche Projekte, Code-Wiederverwendung häufig:I RadiusAdmin
Administration von Radius Servern/UsernI DHCPAdmin
Administration von DHCP-Servern / HostsI NOC-Störungsmeldungen
Verwaltung in RailsI Networks-Verwaltung
Vorher flache XML-Datei ;)I VoIPAdmin
In der EntwicklungI MoPS-Gastzugänge / MoPS-Weblogin
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Rails - Alternativen
Rails ist ein Framework von vielen:I Symfony (PHP)http://www.symfony-project.org/
I CakePHP (PHP)http://cakephp.org/
I Django (Python)http://www.djangoproject.com/
I Merb (Ruby), Merge mit RoR 3http://www.merbivore.com/
I Catalyst (Perl)http://www.catalystframework.org/
Viele neuere Frameworks verhalten sich wie Rails
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
Literatur zu Ruby & Rails
I Rails Guides - http://guides.rubyonrails.org/Längere Tutorials, generell und über einzelne Komponenten
I Agile Web Development with Rails, 3rd EditionThe Pragmatic Bookshelf, ISBN: 978-1-93435-616-6Sehr ausführliches Rails-Buch mit Tutorial-Teil
I Rails API - http://api.rubyonrails.org/Rails API Dokumentation
I Railscasts - http://railscasts.com/Kurze Screencasts zu einzelnen Techniken
I Ruby Core rDoc - http://www.ruby-doc.org/core/Klassen- und Library-Referenzhttp://www.ruby-doc.org/docs/ProgrammingRuby/html/builtins.html (Alt)
I Programming Ruby, 2nd EditionThe Pragmatic Bookshelf, ISBN: 978-0-9745-1405-5Das Pickaxe-Book, sehr umfassend (mit Referenz)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails
The End
Demorunde!
Folgefragen können gerne an [email protected] [email protected] gerichtet werden.
Oder einfach vorbei schauen ;)
RWTH Aachen UniversityRechen- und Kommunikationszentrum Einführung in Ruby on Rails