Ruby on Rails

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche
Ruby on Rails

RoR Standard Seite
Basisdaten
Entwickler: Rails-Core-Team [1]
Aktuelle Version: 2.1.0
(1. Juni 2008)
Betriebssystem: Plattformunabhängig
Kategorie: Web Application Framework
Lizenz: MIT-Lizenz
Website: rubyonrails.com

Ruby on Rails, kurz Rails oder RoR, ist ein von David Heinemeier Hansson in der Programmiersprache Ruby geschriebenes und quelloffenes Web Application Framework. Es wurde im Juli 2004 zum ersten Mal der Öffentlichkeit vorgestellt.

Es basiert auf den Prinzipien „Don't Repeat Yourself“ (DRY) und „Convention over Configuration“, d.h. statt einer variablen Konfiguration sind Konventionen für die Namensgebung von Objekten einzuhalten, woraus deren Zusammenspiel sich automatisch ergibt. Diese Funktionen ermöglichen eine rasche Umsetzung von Anforderungen und damit agile Softwareentwicklung.

Inhaltsverzeichnis

[Bearbeiten] Konzept

Rails folgt der „Model View Controller“-Architektur (MVC) und besteht aus fünf Modulen:

  • Active Support: Ruby-Erweiterungen von Rails
  • Active Record: Objektabstraktionsschicht basierend auf dem objekt-relationalen Muster oder Model (das „M“ aus MVC) von Martin Fowler
  • Action Pack: Request-Behandlung und Response-Ausgabe. Die Anfragen werden durch eine öffentliche Methode des Controllers (Action Controller, das „C“ aus MVC) behandelt. Die Ausgabe wird mittels eines Templates (Action View, das „V“ aus MVC) vorgenommen.
  • Action Mailer: E-Mail-Versand und -Empfang
  • Mit Version 2.0 wurde Action Web Service durch Active Resource ersetzt: Web-Service-Programmierung, Unterstützung für XML-RPC und REST.

Rails integriert die JavaScript-Frameworks Prototype und Scriptaculous und bietet so Methoden zur einfachen Entwicklung von Ajax-Applikationen.

[Bearbeiten] Geschichte

[Bearbeiten] Version 1.0

Ursprünglich wurde Rails für eine Webapplikation namens Basecamp entwickelt, dann jedoch daraus extrahiert und im Juli 2004 zum ersten Mal der Öffentlichkeit vorgestellt. Die Version 1.0 wurde am 13. Dezember 2005 fertiggestellt.

[Bearbeiten] Version 1.1

Schon am 28. März 2006 folgte die Version 1.1. Neu war vor allem

  • RJS (Ruby on Rails JavaScript Templates), das es ermöglichte, Templates für Javascript zu erstellen, sowie
  • Verbesserungen an ActiveRecord, welche es unter anderem erlaubt, polymorphe Assoziationen zu benutzen.
  • Außerdem wurde die Performance verbessert.[2]

[Bearbeiten] Version 1.2

Am 19. Januar 2007 erschien die Version 1.2. Highlights der Version 1.2 waren vor allem

  • REST,
  • Routing nach MIME-Type und
  • ein Interface zur sicheren Behandlung von UTF-8-Strings.

Außerdem wurde eine Handvoll von Methoden als deprecated gekennzeichnet, diese geben nun Warnungen aus und es wurde angekündigt, dass sie aus dem nächsten Major-Release, der Version 2.0, aus Rails entfernt werden.[3]

[Bearbeiten] Version 2.0

Am 7. Dezember 2007 erschien nach ca. einem Jahr Entwicklungsarbeit Rails 2.0[4]. Sie bringt mehrere hundert Neuerungen mit sich und vollzieht die Umstellung von SOAP zu REST als Plattform für Web Services[5].

[Bearbeiten] Version 2.1

Am 1. Juni 2008 erschien die Version 2.1. Sie brachte Verbesserungen bei der Behandlung von Zeitzonen, erlaubt das Definieren der Anwendung von Abhängigkeiten zu RubyGems und kann Änderungen an Models verfolgen, wodurch auch die Datenbankzugriffe effizienter werden. Darüber hinaus wurden sogenannte Named-Scopes eingeführt, mit denen Queries mit häufig benötigten Bedingungen definiert werden können und die Migrations wurden dahingehend geändert, dass diese nicht mehr durchnummeriert werden, sondern einen Timestamp erhalten. Die Nummerierung führte beim Entwickeln in Teams zu Problemen, wenn gleichzeitig zwei Entwickler eine neue Migration erstellten, die dann die gleiche Nummer hatte.[6]

Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung.

[Bearbeiten] Philosophie

Als Grundprinzipien von Rails gelten „Don’t repeat yourself“ (Wiederhole dich nicht) und „Convention over configuration“ (Konvention über Konfiguration).

„Don’t repeat yourself“
Jede Information sollte nur ein einziges Mal vorhanden sein. So reicht es in Rails beispielsweise dank ActiveRecord etwa, die Spalten einer Tabelle nur in der Datenbank festzulegen. Anstatt diese Informationen noch ein zweites mal im Quellcode oder einer Konfigurationsdatei kodiert zu verlangen, liest ActiveRecord diese Informationen direkt aus der Datenbank. Rails erstellt für das Model automatisch Getter- und Setter-Methoden, damit die Daten einfach in die Datenbank geschrieben bzw. von dort gelesen werden können. Dieses Verfahren hat auch den Vorteil, dass die Informationen nicht inkonsistent werden können, falls beispielsweise die Datenbank geändert, dies aber für die Konfigurationsdatei vergessen wurde.
Siehe auch Hauptartikel Don't repeat yourself.
Convention over Configuration
Rails erwartet sinnvolle Standardwerte. Erwartet wird etwa, dass der Primärschlüssel einer Tabelle vom Typ Integer ist und ID heißt, dass ein Model mit dem Namen Customer in der Datei #{RAILS_ROOT}/app/models/customer.rb gespeichert ist und die zugehörige Tabelle customers heißt. Ist dieses Model über eine 1:N-Beziehung mit einem Model Contract verknüpft, so wird erwartet, dass in der Tabelle contracts ein Fremdschlüssel mit dem Namen customer_id vorhanden ist. Wenn diese Standardwerte nicht zutreffen, können sie einfach umkonfiguriert werden, in den meisten Fällen bleibt der Entwickler jedoch von den ausführlichen Konfigurationsmöglichkeiten verschont.

[Bearbeiten] Scaffolding

Mittels des eingebauten scaffolding (in Deutsch etwa Gerüstbau) ist es möglich, Web-Anwendungen on the fly zu entwickeln. Wenn in der Datenbank etwa ein Feld hinzugefügt wird, erscheint es auch sofort in der entsprechenden View/New/Edit-Ansicht. Die Möglichkeit des sofortigen Visualisierens eines Datenbankfeldes und das Verknüpfen diverser Datenbankoperationen mit eben diesem Textfeld wird oftmals auch mit dem Begriff CRUD (Create, Read, Update, Delete) oder CRUD-Framework bezeichnet. Scaffolding ist vor allem für Prototyping gedacht und wird in produktiven Anwendungen fast immer mit eigenem Code ergänzt.

[Bearbeiten] Webserver-Unterstützung

Zum Entwickeln und Testen bietet sich der zum Ruby-Paket gehörende Webserver WEBrick als Applikationsserver an. Für den produktiven Einsatz wird Apache oder Lighttpd mit FastCGI empfohlen, aber auch jeder andere Webserver mit CGI- oder FastCGI-Unterstützung funktioniert. Eine weitere Möglichkeit stellt der größtenteils in Ruby geschriebene Webserver Mongrel dar, der im Gegensatz zu WEBrick für den Produktiveinsatz geeignet ist. Unter Apache kann mod ruby die Leistung verbessern, jedoch wird der parallele Betrieb mehrerer Rails-Applikationen auf demselben Server erschwert und kann zu erheblichen Sicherheitsproblemen führen.

[Bearbeiten] Schichten

[Bearbeiten] Model

Das Back-end einer Rails-Applikation bildet im Normalfall eine relationale Datenbank. Der Zugriff auf diese wird mit Hilfe von ActiveRecord hergestellt. Dabei handelt es sich um eine ORM-Schicht, welche eine Klasse auf eine Tabelle und ein Attribut auf eine Spalte abbildet. Ein Datensatz in einer solchen Tabelle entspricht genau einer Instanz. Derzeitig werden die folgenden Datenbanken unterstützt:

Weiterhin besteht die Möglichkeit, ein anderes Format zu verwenden (z. B. XML-Dateien) oder vollständig auf ein Backend zu verzichten.

[Bearbeiten] Controller

Die Steuerungsschicht einer Rails-Applikation wird mithilfe der ActionController-Klasse hergestellt. Diese ist Bestandteil der ActionPack-Bibliothek. Ein Controller kapselt eine bestimmte Geschäftslogik und bietet Schnittstellen, um mit dieser kontrolliert zu interagieren. Diese Schnittstellen werden Actions genannt. Ein üblicher Rails-Request (z. B. URL: //servername.net/controller/action ) enthält den Namen des anzusprechenden Controllers. Dieser ist äquivalent zu dem Klassennamen. Weiterhin wird eine spezielle Action aufgerufen, diese wird innerhalb der Controller-Klasse als Methode dargestellt. Über den eingebauten Routing-Mechanismus besteht jedoch die Möglichkeit, einen solchen Rails-Request nach den eigenen Bedürfnissen anzupassen.

[Bearbeiten] View

Für die Präsentationsschicht ist die Klasse ActionView zuständig. Diese ist ebenfalls Bestandteil der ActionPack-Bibliothek. Folgende Ausgabeformate werden zur Zeit von Rails unterstützt:

Zusätzlich werden die folgenden Templatesysteme angeboten:

  • ERB für (X)HTML und Javascript
  • Builder für XML

Weiterhin besteht die Möglichkeit den HTTP-Header selbst zu manipulieren und so andere Formate an den Client zu senden.

[Bearbeiten] Literatur

[Bearbeiten] Verwandte Frameworks

Inspiriert von dem Erfolg und dem Konzept von Ruby on Rails, teils auch Vorbild für oder parallel dazu, sind eine Reihe von ähnlich konzipierten Frameworks für andere Sprachen entstanden:

  • Django ist ein quelloffenes MVC-Framework für Python.
  • Struts verfolgt ähnliche Ansätze im Java-Bereich.
  • Grails basiert auf der Programmiersprache Groovy, eine Skriptsprache für die JVM
  • CakePHP, Symfony oder CodeIgniter sind Beispiele für quelloffene MVC-Frameworks für PHP.
  • ZK_(Framework) AJAX ohne JavaScript-Programmierung und mit integrierter Backend-Anbindung, Ruby und ZK sind integrierbar.

[Bearbeiten] Weblinks

[Bearbeiten] Ruby on Rails im Einsatz

[Bearbeiten] Quellen

  1. rubyonrails.org/core - Ruby-Core-Team
  2. Riding Rails: Rails 1.1: RJS, Active Record++, respond_to, integration tests, and 500 other things!, 28. März 2006 (englisch)
  3. Riding Rails: Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations, 19. Januar 2007 (englisch)
  4. http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done
  5. http://www.heise.de/newsticker/meldung/print/100265
  6. http://weblog.rubyonrails.org/2008/6/1/rails-2-1-time-zones-dirty-caching-gem-dependencies-caching-etc
Persönliche Werkzeuge