18. Februar 2007 in Journal » Ruby on Rails

Ruby on Rails - Einführung

Ich begann schon vor einigen Wochen mich damit auseinander zu setzen, was Ruby on Rails ist und wie das ganze funktioniert. Nachdem ich für kurze Zeit das Interesse verloren habe, kam ich letzte Woche endlich dazu von der Theorie in die Praxis über zu gehen. Für alle, die sich für Ruby on Rails interessieren habe ich hier eine kleine Einführung.

Was ist Ruby?

Ruby ist eine plattform-übergreifende Interpreter-Sprache, die im Jahre 1995 vom Entwickler Yukihiro Matsumoto veröffentlicht wurde. Sie hat sehr viel Vorteile der Skriptsprachen, wie Perl oder Python, hat aber auch sehr viel gemeinsam mit der objekt-orientierten Sprache schlecht hin - Smalltalk. Die besonderen Merkmale dieser Sprache sind die extrem gute Lesbarkeit des Codes und dass wirklich alles, also auch Strings und Integers als Objekte anzusehen sind.

Was ist Ruby on Rails?

Ruby on Rails ist ein Framework für web-basierte Anwendungen. Das Framework wurde von 37signals entwickelt und ist Open-Source. Bekannte Rails-basierte Projekte sind Basecamp oder das Redaktions-System von A List Apart.

Welche Vorteile hat Rails?

  • Rails führt die extrem gute Lesbarkeit von Ruby fort.
  • Rails-basierte Web-Anwendungen nehmen den Entwicklern Routine-Arbeit ab.
  • Rails verspricht 10-mal schnellere Ergebnisse als vergleichbare Java-Frameworks.
  • Rails ist auf verschiedenen Webservern einsetzbar und bringt sogar einen eigenen Webserver namens Webrick mit.

Hier nun ein paar Fachbegriffe mit denen man schon als Einsteiger konfrontiert wird.

Controller

Ein Controller ist das Herz einer Rails-Anwendung. Er leitet Requests weiter und schickt Rückgaben der Models an die Views weiter. Die Assoziationen (z.B. Artikel haben viele Kommentare) der Models werden vom Controller bestimmt.

Models

Models sind die Einzel-Komponenten einer Rails-Anwendung. Modelle eines Blog wären z.B. Artikel, Kategorien oder Kommentare. Mit Rails entwickelte Models sind völlig unabhängig voneinander und könne also vollständig isoliert funktionieren oder sogar in anderen Rails-Projekten Anwendung finden. Die Assoziationen von Model zu Model (z.B. Artikel haben viele Kommentare) werden daher im Model selbst bestimmt.

Views

Views sind die Templates der Rails-Anwendungen. Es wurde keine neue Template-Engine entwickelt, sondern stattdessen wurde auf einfache Ruby-Syntax zurückgegriffen. Der Vorteil daran ist, dass der Code lesbar bleibt und trotzdem extrem flexibel ist. Views generieren simples (X)HTML in Verbindung mit der Javascript-Bibliothek script.aculo.us für den Einsatz visueller Effekte oder AJAX.

Scaffolds

Scaffolds sind Grundgerüste von ModelsControllern. Wird ein Scaffold für ein Controller gestartet, werden Funktionen, wie z.B. beim Model Artikel das Anlegen, Ansehen, Bearbeiten und Löschen von Artikel bereit gestellt. Startet man ein Scaffold über den Controller, werden die Funktionen zwar dynamisch bereitgestellt, aber sind dann noch nicht editierbar. Sie müssen über die Konsole erst "gerendert" werden. Das Rendern eines Scaffolds erstellt den passenden Code und stellt die Interfaces in den Views bereit.

Weiterlesen

In meiner Bookmarksammlung habe ich einen Ordner über Ruby on Rails angelegt, in dem ich immer mal wieder Bookmarks hinzufüge. Momentan sind es 14 Bookmarks, hauptsaechlich Einführungen in Ruby on Rails.


17 Kommentare

Marcus am 18. Februar 2007 #

Danke für die gelungene Einführung und den Hinweis auf die Links. Über eine Fortsetzung des Artikels a la "Erste Schritte in Ruby" würde ich mich freuen.

Christian am 18. Februar 2007 #

Vielleicht auch ganz interessant ist die "Portierung" von ROR ins PHP-Universum. Das Framework dazu nennt sich CakePHP ( http://www.cakephp.org ) und hat im Prinzip alle Möglichkeiten die ROR auch bietet..also z.B. das MCV-Prinzip, Auto-Validation und Scaffolding.

Vorteil ist natürlich, das PHP bei weitem verbreiteter ist als Ruby, sprich, man kann unter Cake entwickelte Apps auch mal schnell auf dem Wald und Wiesen-Hoster zum laufen bringen, denn Ruby ist unter den Otto-Normal-Hostern ja doch eher spärlich verbreitet.

Dave am 18. Februar 2007 #

Wenn ich von CakePHP lese, muss ich mich einfach immer zu Wort melden. Und zwar wegen.... tatataaa: Symfony.

Symfony ist ganz ähnlich aufgebaut wie RoR, auch ähnlich wie cakePHP. Geht aber eigene Wege.

Wer MVC programmieren möchte (ohne die hässlich Sprache Ruby) und schon Erfahrung mit PHP hat, sollte meiner Meinung nach auch dabei bleiben. PHP Programmierer findet man wie Sand am mehr, außerden sind sie billig zu haben ;)

Die Dokumentation von Symfony ist übrigens hervorragend (vollständige API Dokumentation, kostenloses EBook, Askeet Tutorial, Video Tutorials), im Gegensatz zu dem was ich bei meinem kurzen Exkurs in Ruby erfahren habe.


Und dass PHP sehr nett dokumentiert ist, muss ich hier wohl auch keinem sagen. Außerdem gibt es schon gute IDEs für PHP, bei RoR blieb mir damals nichts anderes übrig als RadRails zu verwenden - und das hat mir nicht sehr gut gefallen.

Christoph am 18. Februar 2007 #

"Die Assoziationen (z.B. Artikel haben viele Kommentare) der Models werden vom Controller bestimmt."

Nope, die Beziehungen werden in den Models selbst definiert (belongs_to, has_many,...)

"Scaffolds sind Grundgerüste von Models."
Scaffolds sind Grundgerüste von Controllern, ich kann meinem Controller sagen, dass er als solcher für ein bestimmtes Model agieren soll, es wird die Funktionalität dann dynamisch hinzugefügt (mittels scaffold :model) oder ihn auch statisch erzeugen ("rendern").

-> http://rails.rubyonrails.com/classes/ActionController/Scaffolding/ClassMethods.html

Martin Labuschin am 18. Februar 2007 #

Hm, wenn ich ein Scaffold dynamisch, erhalte ich doch passenden Funktionen für das Model. Beispiel:

class SerenityController < ApplicationController
  scaffold :user

end

Ich erhalte doch mit dieser Angabe ein Scaffold für das Model user, oder nicht?

Bei den Assoziationen hast du aber recht. Ich habs ausgebessert.

Wolfgang Bartelme am 19. Februar 2007 #

Interessant, dass wir am selben Tag über das gleiche Thema schreiben :) Anyway danke für die kurze Einführung.

Chris Dorner am 19. Februar 2007 #

Die Template-Engine nennt man auch eruby (embedded Ruby) und wird hier als eigentständiges Projekt entwickelt: http://raa.ruby-lang.org/project/eruby/
Und Rails führt nicht wirklich die Lesbarkeit usw. von Ruby fort, denn Rails ist nur ein Framework für Ruby, Rails hat nichts mit dem Syntax von Rails Anwendungen zu tun.


Nebenbei sollte man auch das Pendant in Python (bzw. ein ähnliches Projekt dass aber z.T. andere Ansätze verfolgt) Django (http://www.djangoproject.com ) erwähnen.

Samo am 19. Februar 2007 #

"Wer MVC programmieren möchte (ohne die hässlich Sprache Ruby) und schon Erfahrung mit PHP hat"


Schon komisch, dass die meisten Programmierer Ruby toll finden, die meisten PHP-Skripter aber nicht. Und meine persönliche Erfahrung (keinesfalls repräsentativ) hat gezeigt, dass jeder, der mal ein wirklich komplexes Projekt mit PHP machen mußt ordentlich Haare gelassen hat und sich danach nach einer Alternative umsah.

Jedem das seine.

Christoph am 19. Februar 2007 #

Martin, Nein, dein Model ist ja bereits komplett definiert, das Gerüst ist für deinen Controller.

Martin Labuschin am 19. Februar 2007 #

Argh! Stimmt, du hast recht. Danke

Dave am 22. Februar 2007 #

@Samo:

<blockquote>Schon komisch, dass die meisten Programmierer Ruby toll finden, die meisten PHP-Skripter aber nicht. </blockquote>

Ui, das war jetzt aber ein harter Schlag. Man kann auch in PHP vernünftig programmieren, man wird nur nich von PHP dazu gezwungen. Dazu gehört vielleicht ein bißchen mehr Disziplin als in anderen Sprachen, aber es ist durchaus machbar.
Auch komplexe Webanwendungen lassen sich mit PHP entwickeln, wenn man das richtige Framework hat sogar ziemlich elegant.

Martin Labuschin am 22. Februar 2007 #

Klar, PHP 5 hat sich auch auf OOP spezialisiert. Das hat die Fähigkeit zur Eleganten Programmierung in PHP echt sehr optimiert. Leider läuft PHP 5 bislang nicht auf diesem Webserver.

Anderen Stimmen zufolge sollen die PHP-Frameworks symfony und CakePHP sehr fähig sein.

Jeena Paradies am 22. Februar 2007 #

Bei PHP vs. Ruby muss ich mich wiederum immer zu Wort melden. Ich selbst habe das programmieren mit PHP angefangen und das war der größte Fehler den ich damals machen konnte. Die PHP ist so etwas von hässlich und inkonsistent, dass wenn man von PHP auf eine sinnvolle Sprache umsteigen will man es unglaublich schweer hat.

Hätte ich damals mit JavaScript angefangen wäre einiges einfacher zu verstehen gewesen und ich hätte mir viel schneller andere Sprachen aneignen können ohne alles wieder neu lernen zu müssen.

Und PHP 5 hat sich auf OOP spezialisiert? Sorry, aber da kann ich nur müde lächeln.

Benny am 23. Februar 2007 #

@ Dave: Ich will bestimmt nicht rumtrollen oder flamen, aber mich würde es dann doch sehr stark interessieren was Du an Ruby so hässlich findest und an PHP so toll, weil Du solche Behauptungen aufstelltst: "die hässlich Sprache Ruby"...


Interessant finde ich auch, dass Du auf Deinem Blog folgendes geschrieben hast: "... welches leider noch auf PHP 4 basiert. Wer sich wirklich viele Stunden täglich mit PHP 4 rumschlagen muss, dem fallen auf Dauer so viele komische Eigenheiten der Sprache auf. Und die müssen natürlich gebloggt werden, für nicht-programmierer denkbar uninteressant. Aber als eingefleischter OOPler und Webentwickler kann man ein Schmunzeln beim Lesen nicht vermeiden. Also, ab in den Feedreader damit!"

Du solltest Dich als "eingefleischter OOPler" vielleicht mal etwas weiterbilden, denn ich gebe Jeena Paradies recht, PHP ist wirklich noch weniger OOP als Java. Und da Du mit PHP 4 arbeitest will ich lieber nicht weiter reden...

tom am 13. April 2007 #

sorry jungs (und jennas) aber wo genau soll ruby denn php was voraus haben?


webentwickler-frameworks für php? gibts genügend... siehe oben.

kürzere entwicklungszeiten mit ruby? lachhaft... es kommt auf den code an, den ich fabriziere (oder brauchst du für zwei geschweifte klammern 2 stunden länger) und die art wie ich mein problem löse.

php und oop? in php4 mies, in php5 einwandfrei!

anzahl qualitativ hochwertiger entwicklertools? ohne worte...


verbreitung bei den hostern? punkt für php

nichts gg. ruby, aber herr im haus ist immer noch php. und ob sich wg ruby daran etwas ändert kann ich mir nicht vorstellen. php ist zu bewährt/verbreitet/einfach(!) um vom thron gestoßen zu werden!

ich habe auch eine zeit lang java für webentwicklung verwendet, aber fand das - vergleichen mit php - zu aufwändig. für größere projekte ist java meines erachtens ok, aber für kleinere anwendungen ist es so wie mit den kanonen, die auf spatzen schießen. ansonsten, das design der sprache java: super!


ach ja, der obere beitrag: "PHP ist wirklich noch weniger OOP als Java"... ähm... java wenig objektorientiert? und mäuse jagen katzen? mag sein dass es sich von z.B. c++ unterscheidet, aber traditionen gibt es um gebrochen zu werden... und die java-auffassung von oop passt perfekt in das gesamt-design der sprache, auch wenn dabei auf einige features der klassischen oop (auf die du vermutlich anspielst) verzichtet wurde.

Martin Labuschin am 13. April 2007 #

Wenn ich dich richtig verstanden habe, vergleichst du eine webgebundene Programmiersprache mit einer plattformunabhängigen Programmiersprache. Ruby ist nur in Verbindung mit Ruby on Rails oder mit aufwendigen CGI-Lösungen im Web einsetzbar. Und ja: RoR greif auch auf eine CGI-Lösung zurück.

Lese dir mal folgende Artikel durch. Ich finde, dass die einen recht guten Vergleich aufstellen.


- http://www.rubyonrailsblog.com/articles/2006/10/10/ruby-vs-php-syntax-examples
- http://wiki.ruby-portal.de/Ruby_vs._PHP

Vorteile von Ruby:

- gut lesbare Syntax
- 100% objektorientiert (seit der ersten Version)
- plattformunabhängig
- Mixin von Modulen möglich (Klassenerweiterung)

Rico Schulz am 24. April 2007 #

Ich muss mich hier einfach zu Wort melden! Entschuldigt meine Direktheit, aber...


Dave, deinen Kommentar kann ich so nicht stehen lassen!

Ruby ist hässlich? Das kann bloß von einem voreingenommenen PHP Scripter kommen. Der Ansicht war ich auch mal (als ich mir damals das erste Mal Ruby Code angesehen hatte und noch vom PHP rumdoktorn verblendet war), aber durch eigene Erfahrungen wurde ich eines Besseren belehrt.

Wer Ahnung von PHP hat, sollte auf jeden Fall nicht dabei bleiben, sondern einmal Ruby oder gleich Rails ausprobieren. Als Scripter ist nichts schlimmer als zu staknieren. Ich nenne mal dieses Beispiel: Relauch der Community Eins.de; vor der Umstellung 50.000 Zeilen PHP Code, nach der Umstellung 5.000 Zeilen Rails bzw. Ruby Code.

Auch ich verwende Radrails. Radrails ist auf Eclipse basierend. Eclipse gehört fast schon zum guten Ton bei Java Programmierern. Auch für meine damaligen PHP Projekte habe ich Eclipse verwendet, natürlich mit PHP Plugin.


Grüße
Rico

Diskussion geschlossen

Die Kommentarfunktion dieses Artikels wurde deaktiviert. Private Mitteilungen an Martin bitte per E-Mail an martin@labuschin.com. Danke.