35
Einführung in Ruby on Rails Johannes Gilger & Matthias Lederhofer Rechen- und Kommunikationszentrum der RWTH Aachen Network Operation Center 21. Juli 2010 RWTH Aachen University Rechen- und Kommunikationszentrum Einführung in Ruby on Rails

Einführung in Ruby on Rails - heipei.net fileRails I Open-Source Web-Application Framework auf Grundlage von Ruby I Aufgeteilt in mehrere Komponenten I ActiveRecord - ORM (Datenbankanbindung)

  • 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