bussole-Logo und Wortmarke

FirstRails

Die erste eigene Anwendung

Mit nicht mehr Kenntnissen als langjähriger Berufserfahrung in den "althergebrachten" Programmierumgebungen bieten Ruby und Rails dennoch erstaunliche Möglichkeiten auch für "Alte Hasen" - mit ein wenig Durchhaltevermögen und der Unbekümmertheit, sich von keinem noch so unbekannten Teilsystem ins Boxhorn jagen zu lassen.

Ausführliche Beschreibung der Vorgehensweise im Buch: Das japanische Juwel

0) Umfang und Problemstellung (Leseprobe, 97 kb)
1) Der erste Schritt
2) Der zweite Schritt
3) Der dritte Schritt
4) Der vierte Schritt
5) Der letzte Schritt

Datenbank-Definitionen
Die Umgebung und bekannte Probleme
Beurteilung der Anwendung (Leseprobe, 44 kb)

Schritt 1 FirstRails und Rails 2.0 (203 kb)
5a) Endgültige Sourcen (Schritt 5) der Rails-Anwendungsordner "app" und "public" unter Rails 1.2.3

(Bei den PDF bitte beachten, dass Buch-interne Links bei den Leseproben natürlich nicht funktionieren können)

1) Das reine Rails-Skelett mit einer einfachen Listendatei


Im ersten Schritt ist noch nicht viel geschehen - außer der Erstellung des mehr oder minder nackten Rails-Skelets mit Hilfe von RadRails. Die Sourcen zeigen, wie wenig nötig ist, um eine kleine Listendatei zu präsentieren - nur im Ordner "app" waren ein paar Quell-Dateien und Befehle erforderlich.

Mit den aktuellen Datenbankbeschreibungen nicht mehr lauffähig! Schritt 1

Sourcen des Rails-Anwendungsordners "app"

(Mit den aktuellen Datenbankbeschreibungen nicht mehr lauffähig!)

2) Der Grundstock der Anwendung


Der zweite Schritt liefert schon mehr:
- Erfahrungen mit CSS und Browsergestaltung sowie Ruby-Programmierung, um die Navigation mit der Baumstruktur zu erzeugen
- die ersten erfolgreichen Gehversuche mit dem Rails-Framework zum Einlesen von Datenbank-Informationen und zur Auflistung und Verwaltung der Dateien
- das erste Ajax: "auto_complete", um den Modul-Namen nicht mehr vollständig eingeben zu müssen, wenn er bereits bekannt ist.

Schritt 2
Schritt 2

Sourcen der Rails-Anwendungsordner "app" und "public"

Beide Ordner in eine mit den Rails-Generatoren erstellte Skelett-Anwendung "FirstRails" kopieren

3) Die vollständige Verwaltung von Datensätzen


Der dritte Schritt macht die Sache rund:
- Such- bzw. Positionierungsfunktion in der Treelist
- Drop-Down-Liste
- ein bisschen mehr Ajax: "drag & drop" - da aus Scrollbalken-Bereichen mit einfachen Mitteln nicht "gedraggt" werden kann, wird der umgekehrte Weg beschritten: Das Feld, das per Drag & Drop mit Werten versehen werden soll, erhält einen "Anker", ein Icon, mit die Auswahl dann durchgeführt werden kann.

Schritt 3
Schritt 3

Sourcen der Rails-Anwendungsordner "app" und "public"

Beide Ordner in eine mit den Rails-Generatoren erstellte Skelett-Anwendung "FirstRails" kopieren

4) Erste Raffinessen


Der vierte Schritt baut nur noch aus:
- Erstellung komplexerer Formate
- Ausgabe "sprechender Fehlermeldungen"
- weitere Ansichten auf die Datensätze, um gezieltes Arbeiten zu erlauben
- paralleles "drag & drop": Mehrere Felder auf demselben Format sollen mit dieser Funktionalität bedient werden, ohne sich gegenseitig zu stören

Schritt 4

Schritt 4

Sourcen der Rails-Anwendungsordner "app" und "public"

Beide Ordner in eine mit den Rails-Generatoren erstellte Skelett-Anwendung "FirstRails" kopieren

5) Fertigstellung


Der fünfte Schritt schließt das Projekt ab:
- Integration weiterer Dateisysteme
- Tests mit unterschiedlichen Beispieldaten
- Tests auf weiteren Web-Servern

Schritt 5

Schritt 5

Sourcen der Rails-Anwendungsordner "app" und "public"

Beide Ordner in eine mit den Rails-Generatoren erstellte Skelett-Anwendung "FirstRails" kopieren

Datenbank-Definitionen

Zu beachtende Dateiänderungen:

Bei der Installation der Dateien ist zu beachten, dass bis Schritt 4 die Feld-Referenzierung der Dateien über Name erfolgte.

Um also die Datenbankbeschreibungen für die Schritte 2-4 verwenden zu können, muss das Feld "datei" in der Datei "felds" zu einem Textfeld umdefiniert werden.

Datenbank-Konfigurationsdatei: database.yml

Die Datenbank "FirstRails_Test" ist dabei nur eine Kopie von "FirstRails".

Einfache SQL-Installation:
SQL-Anweisungen
Beispieldateien

Diese einfachen SQL-Befehle, erstellt mit phpMyAdmin, ermöglichen es, in allen Datenbanksystemen, die MySQL beherrschen und SQL-Eingaben erlauben, die benötigten vier Dateien "dateis", "eigenschaften", "felds" und "lists" anzulegen sowie die Datensätze für diese Dateien. Auch die für diese Dateien und die beiden Beispielfälle erforderlichen Eigenschaften liegen vor, jedoch ohne ihre Verwendung.
Nach der Datenübernahme in ein leeres Dateisystem namens "firstrails" sollte deshalb in die Ansicht "Eigenschaft" der Baumstruktur gewechselt und die Funktion "Eigenschaften neu rechnen" ausgeführt werden. Zu beachten ist, dass diese Funktion aber erst im letzten Schritt zur Verfügung steht.

Feldbearbeitung

Anschließend kann - ab Schritt 4 - dann in der Ansicht "DB" die Datenbank "firstrails" ausgewählt und übernommen werden. Dabei werden nicht alle Eigenschaften gefunden, was die ersten Eigenschaftszuordnungen erforderlich macht: Dem Datei-Feld "classifier" entspricht die Feld-Eigenschaft "Klassifizierer", die Felder "typgewicht" und "records" korrelieren mit den Eigenschaften "DateiTyp" und "DateiUmfang". Die beiden Felder "redundant" und "anzahl" werden dagegen mit den Feld-Eigenschaften "Redundanz" und "Umfang" ergänzt.
Da die Felder zu diesem Zeitpunkt nur mit Unterlassungswerten bestückt sind, müssen weitere Anpassungen erfolgen.
So ist beim Feld "liste" der Datei "lists" ein Wert von "4" als Anzahl einzutragen, weil nur vier Listen in diesem kleinen System verwaltet werden.
In der Datei "dateis" sind es die Datenbank-Angaben, die reduziert werden müssen. Für die zu betrachtenden Modulen wird dabei von höchstens 10 ausgegangen, bei den Datenbanken nur von 5 und als Adapter kommt sogar nur 1 - MySQL - in Frage. Beim Feld "typgewicht" ist darüber hinaus als "Vorgänger" noch das Feld "eigengewicht" aus der Datei "felds" zu berücksichtigen, das Feld "fields" setzt sich sogar vollständig aus Feldidentitäten zusammen: Vorgänger "id" aus "felds".
Bei der Datei "eigenschafts" ist hingegen zu beachten, dass die Art wohl kaum mehr als 10 Werte betreffen kann - und dass bei der Gruppeneigenschaft kein Vorgänger zu berücksichtigen ist, da Referenzierungen innerhalb derselben Datei nicht gezählt werden.
Die letzte und interessanteste Datei ist "felds". Auch hier werden die Referenzierungen innerhalb der eigenen Datei negiert, sodass nur die beiden Relationen zu Dateien und Eigenschaften als Vorgänger zählen: Demnach werden hier die Felder "id" von "dateis" und "eigenschafts" herangezogen - im Falle der ersten vier Entwicklungs-Schritte der Applikation war es bei "dateis" jedoch noch "name".
Um die möglichen Anzahlen für die Tentakel-, Portal- und Exit-Werte bestimmen zu können, ist einfach die Frage zu stellen, wieviele Dateien pro Datenbank überhaupt existieren werden, weil dies die maximale Größe für die Distanz-Betrachtung ergibt. Da diese kleine Anwendung nicht gar zu große Datenbanksysteme verträgt, erscheint hier ein Wert von "10" als plausibel. Weil dies ein Schätzwert ist, kann er freilich auch auf 11 erhöht werden - um einen runden Wert für das Eigengewicht zu erlauben.
Die beiden Typenfelder "typfeld" und "typaufgabe" haben dagegen klar bestimmte Inhalte und zwar vier an der Zahl, während die Vorgaben für die Dateien sich nach dem Wert richten müssen, der für Dateien geschätzt wurde: 101 (auch hier zugunsten eines runden Eigengewichts "beschönigt").

Datenübernahme mit MySQL-Administrator:
Dateien und Eigenschaften ohne Feldwerte
Dateien und Eigenschaften mit Feldwerten, inkl. Beispieldaten
Beispieldatei "firstrails_bsp_doc"
Beispieldatei "firstrails_bsp_proj"

Die Dateien wurden mit dem MySQL Administrator als Backup-Datei "Export_red.sql" bzw. "Export_red.sql" erstellt und können deshalb auch über "Restore" in die eigene MySQL-Datenbank übernommen werden.
Im ersten Fall erfolgt die Datenübernahme ohne Feldwerte. Während also Datei-, List- und Eigenschaftsdaten bereits mitgeliefert werden, sind die Felddaten über die Anwendung "FirstRails", Tabellenelement "DB" und Funktion "Datenbank aktualisieren" zu übernehmen (ab Schritt 4): siehe Punkt Feldbearbeitung.
Im zweiten Fall werden auch die Angaben über die Felder der Datenbanken "firstrails", "firstrails_bsp_proj" und "firstrails_bsp_doc" mit geliefert.



Die Umgebung und bekannte Probleme


Die folgenden Sourcen sind lauffähig unter

Windows® 2000, XP

Ruby 1.8.2, 1.8.4

Rails 1.1.2 - 1.1.6 (mit den jeweiligen Modulen)

Rails 1.2 weist größere Veränderungen wie beispielsweise den Session-Cache auf. Es sind deshalb Probleme mit aktuelleren Versionen zu erwarten (s. InstantRails).

MySQL 5

Für frühere MySQL-Versionen kann es genügen, die großen Textfelder als "Blob" zu definieren.

Browser: Firefox 2, IE 7

Ältere Firefox-Versionen können zu Abstürzen überredet werden, ältere Internet Explorer sind möglicherweise nicht einmal in der Lage, die erste Seite anzuzeigen.
Hinsichtlich des IE ist auch zu beachten, dass das Layout auf den Firefox optimiert wurde. Das heißt, dass er gelegentlich Icons nicht korrekt anzeigt oder das Layout nur suboptimal wirkt.

Web-Server: Ruby/WEBrick, Apache mit FCGI

Bei Verwendung des Apache-Servers werden die Umlaute in den Texten nicht korrekt wiedergegeben. Mit einfacher CGI-Unterstützung sind darüber hinaus die Sourcen nur höchst eingeschränkt verwendbar, da die in-memory-Behandlung sich von WEBrick unterscheidet. Ob CGI verwendet wird, zeigt sich deshalb an der Meldung, dass Klassenvariablen nicht gefunden werden konnten.
Doch selbst mit FCGI kann es zu merkwürdigem Verhalten kommen wie beispielsweise zu der Meldung, dass Rails nicht sauber gestartet wurde, was mit einem zweiten Versuch "korrigiert" werden kann. Auch ist die prozessgebundene in-memory-Speicherung gelegentlich störend, was dann besonders in der Baumstruktur zu unerwünschten Effekten führt. Zu unterschiedlichen Ruby-Prozessen kann es beispielsweise dann kommen, wenn ein WEBrick-Server aktiv ist oder bei der Aktivierung von Apache aktiv war.
InstantRails 1.7 (basierend auf Ruby 1.8.6 und Rails 1.2.3) ist ebenfalls nur eingeschränkt anwendbar. Bei der Installation ist zu beachten, dass die Datenbank-Anbindung unterlassungsmäßig ohne Passwort erfolgt, die kleine Text-Datei "currdb.txt" im Ordner "public" gelöscht wird und dass der Aufruf über "application" zu einem Routing Error führt. Hier kann es genügen, den "dateis"-Controller anzusprechen, doch Routing-Probleme sind auch im besten Fall nicht auszuschließen. Solange keine in-memory-Probleme auftauchen (wieder erkennbar an der Meldung nicht vorhandener Klassenvariablen), ist es jedoch möglich, die Grundzüge der Applikation zu besichtigen.

FirstRails-Ruby-Ordner (65 MB)

Das Zip-File enthält einen Ruby-Ordner für Version 1.8.2 sowie die erforderlichen Rails-Module. Liegt eine Ruby-Installation (inkl. der Systemvariablen PATH und RUBYOPT) bereits vor, so genügt es, den vorhandenen Ruby-Ordner durch Umbenennen zu deaktivieren sowie dem im Zip-File angebotenen Ordner den Namen "Ruby" (bzw. den Namen der Original-Installation) zu geben. Der WEBrick-Server wird dann über das Skript "start.bat" im FirstRails-Ordner gestartet.


Sollten Probleme auftauchen, bitte Kontakt aufnehmen - und sollten die Sourcen auch unter anderen Konstellationen funktionieren, wäre eine Nachricht sehr erwünscht.