Ruby on Rails in der Praxis
Schienenfahrzeug

DeveloperIT-ProjekteSoftware

Mit Ruby on Rails schickt sich ein neues Webframework an, die große Zielgruppe der Web-Entwickler für sich zu gewinnen. Was dahinter steckt, verrät dieser Artikel.

Der Aufsteiger

Ruby on Rails in der Praxis

Bei neuen Techniken sind die meisten Web-Entwickler mittlerweile deutlich skeptischer geworden als noch vor einigen Jahren. Deswegen ist es überraschend, dass Ruby on Rails sich doch innerhalb kurzer Zeit einen gewissen Bekanntheitsgrad erarbeitet hat. Vor allem im englischsprachigen Raum ist das Webframework schon recht präsent. Besonders beliebt ist es natürlich in Japan und im asiatischen Raum. Besonders deswegen, weil der Ruby-Entwickler Yukihiro Matsumoto aus Japan stammt. In einer Zeit, in der Ruby noch kaum englischsprachige Dokumentation besaß, wurde es in Japan schon produktiv eingesetzt. Ruby als Technik existiert nämlich bereits seit 1996 – die weltweite Verbreitung begann allerdings erst um die Jahrtausendwende.


Variablen und Zuweisungen

Ruby on Rails in der Praxis

Ruby ist eine komplett objektorientierte Sprache, der man die Wurzeln in Smalltalk noch ein wenig anmerkt. Zeilen werden nicht wie beispielsweise in PHP mit einem Strichpunkt beendet, sondern das Ende der Zeile markiert das Ende der Anweisung. Bei Variablen und Datentypen gibt es kaum Unterschiede zu anderen Sprachen. Variablen werden ohne weitere Zusätze (zum Beispiel $ in PHP, var in Javascript) definiert, Werte mit dem Gleichheitszeichen zugewiesen:

variable = "Wert"

Ein paar Unterschiede zu anderen Sprachen gibt es allerdings. Beispielsweise müssen Variablennamen mit einem Kleinbuchstaben beginnen. So unterscheiden sie sich von Konstanten, die mit Großbuchstaben anfangen. Da Ruby komplett objektorientiert ist, repräsentiert jede Variable genau ein Objekt. Je nach Datentyp hat die Variable dann bestimmte Eigenschaften und Methoden, beispielsweise length für die Länge eines Strings:

variable.length

Das Ganze geht sogar direkt mit dem String (Literal):

"Wert".length


Schleifen & Co.

Ruby on Rails in der Praxis

Ungewöhnlich ist in Ruby, dass Parameter von Methoden nicht in Klammern geschrieben werden müssen – wohl aber können. Die üblichen Blöcke wie Schleifen und Fallunterscheidungen entstehen in Ruby nicht mit geschweiften Klammern wie in C- und Java-basierten Sprachen, sondern mit Schlüsselwörtern (do, end et cetera). Das folgende Beispiel gibt einen Text dreimal aus, ist also eine Schleife:


3.times do
puts "Beliebiger Text"
end

Echte while-Schleifen gibt es natürlich auch:


while a < 10
puts "Wert: " + a
a += 2
end

Sollten Sie das Inkrement oder Dekrement (in den meisten Sprachen ++ und ) vermissen, werden Sie bei den Methoden upto() und downto() fündig. Damit lässt sich eine Schleife in Einserschritten sehr einfach und ganz ohne while realisieren. Ein wenig anders als gewohnt ist es also schon, mit Ruby zu arbeiten, aber für die meisten Dinge gibt es recht elegante Lösungen.


Fallunterscheidung

Ruby on Rails in der Praxis

Hier noch eine Fallunterscheidung, die den Wert einer Variablen überprüft und ausgibt. Hat sie einen anderen Wert, wird der Wert geändert:


if variable == "Wert"
puts variable
else
variable = "Wert"
end

Im Gegensatz zu Python ist die Zahl der Einrückungen allerdings in Ruby nicht entscheidend. Außerdem gibt es beispielsweise sehr wohl geschweifte Klammern, zum Beispiel für assoziative Arrays und Blöcke, die beispielsweise Parameter von Methoden sind. Für Entwickler, die bisher PHP oder Java gewohnt sind, ist der Umstieg zu Ruby nicht ganz einfach. Nach ein wenig Eingewöhnungszeit klappt es aber meist ganz gut.


Konzeptionelles: Rails

Ruby on Rails in der Praxis

Was aber ist Ruby on Rails? Kryptisch gesprochen ein Framework für Web-Anwendungen. Nun ist der Begriff des Rahmenwerks in letzter Zeit schon ziemlich ausgelutscht, der eigentliche Sinn bleibt aber immer derselbe: Das Framework soll Standardfunktionalitäten zur Verfügung stellen und erweiterbar sein. Ruby on Rails ist selbst in Ruby geschrieben. Das Framework hat im Juli 2004 als Version 0.5 erstmals das Licht der Öffentlichkeit erblickt, Version 1.0 ist aktuell aus dem Dezember 2005 und hat der Ruby-on-Rails-Bewegung einen ordentlichen Schub gegeben. Der Begründer von Ruby on Rails ist David Heinemeier Hansen, ein Däne. Mittlerweile gibt es ein Kernteam aus über zehn Entwicklern.


MVC-Architektur

Ruby on Rails in der Praxis

Interessant ist der sehr architekturlastige Ansatz von Ruby on Rails. Basis des Frameworks ist das MVC-Konzept. MVC steht für Model-View-Controller und damit für die drei Teile dieses Architekturansatzes. Das Model ist das Datenmodell und enthält die Daten der Anwendung, die beispielsweise in einer Datenbank gespeichert werden. Das Datenmodell ist vom Rest, sprich View und Controller, unabhängig. Einzig seine Aktualisierungen werden in Form von Ereignissen weitergegeben. Die View entspricht der Darstellung- oder Präsentationsschicht. Sie ist in Ruby on Rails noch nicht einmal unbedingt notwendig, wie das folgende Beispiel zeigt. Sie enthält keine Logik, sondern nur die Präsentation der Daten.

Der dritte Teil ist der Controller. Er übernimmt die Steuerung zwischen View und Model. Er steuert die Interaktion und kann Daten in den Model-Part schreiben. Im Modell ist nicht eindeutig vorgegeben, ob die Geschäftslogik im Datenmodell oder im Controller zu finden ist. Beide Varianten und auch Mischformen sind denkbar. In Ruby on Rails werden alle drei Teile abgebildet, und die Einzelteile lassen sich unabhängig voneinander erzeugen und entwickeln. Eine mit Rails realisierte Anwendung besteht immer zumindest aus Model und Controller, die View ist optional.


Hands on

Ruby on Rails in der Praxis

Mit nur sehr wenig bis gar keinem Code ist es möglich, Ruby mit einer Datenbank zu verbinden. Ist das MVC-Konzept verinnerlicht, ist der Großteil der Arbeit bereits getan, denn Ruby kann automatisch fast den gesamten Rest erledigen.

Zunächst muss Ruby on Rails installiert werden. Genauere Anleitungen für verschiedenen Betriebssysteme und Installer sind unter www.rubyonrails.org und rubyforge.orgzu finden.

Für Windows gibt es ein All-in-one-Paket: Instant Rails. Dort ist unter anderem auch ein Apache-Webserver und MySQL dabei, inklusive PhpMyAdmin-Anbindung. Allerdings ist bei der zum Redaktionsschluss verfügbaren Version Instant Rails 1.0 nur ein rudimentäres Ruby dabei. In diesem Fall erleichtert es eine Menge Arbeit, wenn zusätzlich noch in das Unterverzeichnis ruby von Instant Rails ein komplettes Ruby installiert ist. Für Windows gibt es dafür einen One-Click-Installer.

Für MacOS X gibt es neben einer ausführlichen Installation auch ein Komplettpaket. Es trägt den passenden Namen Locomotive. Es läuft ab der Version 10.3 und wird mit Lighttpd als Webserver und SQLite als Datenbank ausgeliefert.

Danach geht es an die Erstellung der Anwendung. Als kleines Beispiel soll ein Linkblog dienen: Dort ist es möglich, bequem und schnell Links in den Datenbestand des Blogs einzufügen und diese natürlich auch anzuzeigen.

Basis ist eine MySQL-Datenbank, in der die Informationen für den Linkblog hinterlegt werden. Bei der Nomenklatur ist es wichtig, die folgenden Ausführungen exakt einzuhalten. Ob Singular oder Plural, ob klein geschrieben oder groß, hat innerhalb von Ruby on Rails eine semantische Bedeutung.

Die Datenbank, die erzeugt wird, heißt linkblog. Darin gibt es eine Tabelle namens links (Plural!). Diese wird später die Adressen aller Links enthalten. Sie benötigen dazu die folgenden drei Felder:

id: INT, AUTO_INCREMENT, PRIMARY KEY
url: VARCHAR(100)
description: VARCHAR(100)

Insbesondere bei dem Autowert ist die Schreibweise wichtig. Nur, wenn das Feld id heißt, komplett in Kleinbuchstaben, wird das von Ruby on Rails automatisch als Primärschlüssel erkannt.


Datenbank anlegen

Ruby on Rails in der Praxis

Zurück im Anwendungsverzeichnis der Ruby-on-Rails-Installation (ruby_apps) erzeugen Sie zunächst per Kommandozeile eine neue Anwendung:

rails linkblog

Das erzeugt eine ganze Reihe von Ordnern und Verzeichnissen. Der erste Blick gilt hierbei dem Verzeichnis config. Dort finden Sie eine Datei database.yml, in der die Verbindungsinformationen zur Datenbank angegeben werden. Ruby on Rails unterstützt drei Typen: development, test und production für Entwicklungsrechner, Testrechner und Produktivsystem. Somit könnten Sie drei verschiedene Datenbanken angeben, aber in diesem Fall ist es immer dieselbe. Passen Sie gegebenenfalls den Servernamen und die Benutzerdaten Ihrem eigenen System an:


development:
adapter: mysql
database: linkblog
host: localhost
username: root
password:
test:
adapter: mysql
database: linkblog
host: localhost
username: root
password:
production:
adapter: mysql
database: linkblog
host: localhost
username: root
password:

Das war auch schon fast alles an Code, was an dieser Stelle notwendig ist. Den Rest kann Ruby on Rails alleine erzeugen.


Seiten generieren

Ruby on Rails in der Praxis

Wechseln Sie in das Verzeichnis für die Anwendung (linkblog) und erstellen Sie zuerst ein Model. Als Name geben Sie Link an, beginnend mit einem Großbuchstaben und Singular. Daraus ermittelt Ruby on Rails später die passende Datenbanktabelle:


cd linkblog
ruby script\generate model Link

Das erzeugt unter anderem die Ruby-Datei app/models/link.rb mit folgendem Inhalt:


class Link < ActiveRecord::Base
end

Sprich, die Klasse Link stammt von ActiveRecord::Base ab. Alles andere erschließt sich Ruby on Rails aus der Datei database.yml. Ähnlich spartanisch sieht auch der Controller aus. Das folgende Kommando erzeugt ihn:

ruby script\generate controller Link

Das Ergebnis ist unter anderem die Datei app/controllers/link_controller.rb mit folgendem Inhalt:


class LinkController < ApplicationController
end

Hier müssen Sie selbst Code einfügen. Dazu gibt es mehrere Möglichkeiten. Am einfachsten ist es aber, Ruby on Rails aufzuerlegen, selbst ein Grundgerüst für die Seite zu erstellen. Der englische Begriff für Grundgerüst ist scaffold beziehungsweise scaffolding, und daraus ergibt sich auch der neue Code für die Datei link_controller.rb:


class LinkController < ApplicationController
scaffold :link
end

Es wird also für die Links ein Grundgerüst erstellt. Die Überraschung: Das war es auch schon! Starten Sie über die Administrationskonsole von Instant Rails oder über den Kommandozeilenbefehl ruby script\server den Webserver. Dann rufen Sie die Anwendung über http://localhost:3000/link auf. Es erscheint eine Liste aller Links (zugegeben, die ist leer), sowie ein Link zum Neueinfügen. Dieser weist auf den URL http://localhost:3000/link/new. Die große Überraschung: Eine komplette Eingabemaske für die Links erscheint im Webbrowser. Das funktioniert übrigens auch bei komplexeren Datentypen, etwa bei Datumsfeldern – dann in HTML umgesetzt als eine Auswahlliste für den Tag, eine für den Monat und eine für das Jahr.


Fazit

Ruby on Rails in der Praxis

Mit nur wenigen Klicks und minimalem Code lässt sich mit Ruby on Rails eine Anwendung erstellen, die sogar die MVC-Architektur verwendet. Allerdings ist eine Komponente, das V (View), im vorliegenden Beispiel gar nicht behandelt worden. Damit ist sogar eine Anpassung der von Ruby on Rails generierten Seiten möglich, Templates mit Platzhaltern inklusive.