Buch-Rezension zu „Rails 3 in Action“

Rails 3 in Action“ von Ryan Bigg und Yehuda Katz erschien im September 2011 bei Manning. Ein Buch für Einsteiger in Rails kam mir gerade sehr gelegen, da ich nach einigem Experimentieren mit Ruby nun gerne eine Webanwendung mit Rails entwickeln wollte.

Dieses Buch liest sich sehr flüssig und man bemerkt schnell dass die Autoren wissen wovon sie schreiben. Will man das gelesene aber selber umsetzen bemerkt man leider ebenfalls sehr bald die ersten Probleme. Wichtige Punkte und Details werden erwähnt, aber nicht wirklich gut hervorgehoben. Oft bemerkt man die entscheidenden Stellen so erst nach längerer Fehlersuche im selber geschriebenen Code.

 

Von rails new bis zum deployment

Durch das ganze Buch hindurch wird ein Issue-Tracking-System Schritt für Schritt aufgebaut. Man beginnt mit rails new und bekommt im weiteren Verlauf gezeigt wie man mit dem MVC-Pattern eine Webanwendung entwickelt.

Neben einfachen CRUD-Oberflächen (zum Erstellen, Anzeigen, Editieren und Löschen von Objekten) wird auch auf verschachtelte Ressourcen eingegangen. Wie man Benutzer Authentifiziert und Autorisiert fehlt ebenso wenig wie das Versenden von E-Mails.

Hat man seine Anwendung zusammen muss diese auch deployt werden. Neben einer Anleitung zum Konfigurieren von Capistrano wird auch erklärt wie man Apache oder Nginx konfigurieren muss, damit die Anfragen an die Rails-Anwendung auch beantwortet werden.

Die Autoren zeigen sehr schön welche Schritte nötig sind um von einer Idee zu einer installierten Anwendung zu kommen. Die einzelnen Schritte sind dabei sehr gut durchdacht und man sieht wie alles zusammen passt. Das Konzept dieses Buches ist top, leider wird durch etliche kleine Fehler der Praxisnutzen bald einmal reduziert.

 

Erst ein Test, dann die Funktionalität

Mit Ausnahme der grundlegenden Erklärung im ersten Kapitel wird über das ganze Buch hinweg immer erst ein Test geschrieben bevor die Funktionalität implementiert wird. Als Werkzeug fürs Behavior-Driven Development (BDD) dienen Cucumber und RSpec.

Mir hat dieser Ansatz sehr gut gefallen. Da es bei Ruby keinen Compiler gibt der einem auf Fehler in der Syntax hinweist sind Tests unabdingbar – ausser man will wirklich bei jeder kleinen Änderung alles manuell durchtesten…

Neben Tests der Weboberfläche wurde auch gezeigt wie man den Versand von E-Mails oder Funktionsaufrufe in JavaScript kontrollieren kann. Diese komplexeren Tätigkeiten werden sonst meist ausgelassen. Hier hat man für einmal alles schön beisammen und auch verständlich erklärt.

Sehr gut fand ich auch dass nach jedem Teilschritt immer gleich ein commit ins Git-Repository gemacht wurde. So gewöhnt man sich schnell an dieses Versionierungssystem und bekommt ein Gefühl dafür wie oft man committen sollte.

 

Lange Entstehungsgeschichte

Das Buch wurde 2008 gestartet und hatte ursprünglich Merb als Thema. Als Merb Ende 2008 in Rails aufging wechselte auch der Fokus des Buches. Die lange und wechselhafte Geschichte bemerkt man als Leser stellenweise auch im fertigen Buch.

Als Beispiel: Die Funktion f.error_messages wird zum Anzeigen der Fehler in Formularen verwendet. Mit Rails 3 wurde diese Methode entfernt und ist nun nur noch über ein zusätzliches Plug-in nutzbar. Ich hätte es begrüsst wenn man statt dem Plug-in gleich die aktuelle Variante von Rails verwendet hätte.
Gleiches gilt für die Syntax der Migration-Dateien. Was im Buch steht hat nicht viel mit dem Gemeinsam was einem Rails 3.1 generiert. Dies verwirrt den Leser nur unnötig.

 

Cucumber entfernt die Stützräder

Anfangs Oktober 2011 entschied man sich bei Cucumber-Rails die Hilfsfunktionen in web_stebs.rb zu entfernen. Die darin enthaltenden Schrittdefinitionen ermöglichen einem einen schnellen Einstieg in Cucumber, entsprechen aber nicht ganz dem Sinn von BDD. Da viele Tests aus diesem Buch darauf aufbauen hat man nun ein Problem wenn man versucht die Beispiele umzusetzen.

Im Forum zum Buch gibt es bereits einige Links zu Beispielen die die nötigen Änderungen aufzeigen. Ich finde diese Tests lesbarer als was im Buch steht – von dem her kann ich die Begründung für die Änderung in Cucumber nachvollziehen. Wem ein Umbau zu viel Aufwand ist kann in seinem Gemfile die letzte Version von Cucumber-Rails mit web_stebs explizit angeben:

gem 'cucumber-rails', '1.0.6'

 

Was mir fehlt

Entwickelt man eine ganze Anwendung streng nach Test-First hat man am Ende genau den Code geschrieben der gemäss den Anforderungen nötig ist. Gibt es keine Anforderungen an die Oberfläche sieht diese am Ende sehr trist aus. Auch wenn das Thema Rails und nicht CSS ist, ich hätte es sehr begrüsst wenn man in einem Kapitel auf die Gestaltung der Oberfläche eingegangen wäre. Nur ein Link auf eine CSS-Datei ohne grosse Erklärung finde ich ein wenig mager.

Die letzten beiden Kapitel zu Engines und Rack-basierten Applikationen passten für mich nicht wirklich ins Buch. Statt diesen Spezialthemen wäre mir ein Kapitel über das Debuggen einer Rails-Anwendung oder eine Hilfestellung für die häufigsten Probleme lieber gewesen.

In die Probleme rennt man spätestens wenn man die Anwendung in der Produktionsumgebung startet. In Rails 3.1 wurde die Asset Pipeline eingeführt. Da diese nur in der Produktion aktiv ist bemerkt man beim Programmieren und testen nichts. Die Probleme treten erst auf wenn man auch gleich noch mit der Konfiguration des Webservers am kämpfen ist…

Ohne zusätzliche Unterlagen bleibt man so auf der Zielgerade liegen. Dies finde ich für ein Buch das von „Leadern“ der Rails-Community für Anfänger geschrieben wurde sehr schlecht. Ich verstehe das sich Rails sehr schnell entwickelt und man nicht alles zum vornherein beachten kann. Aber mindestens in die Errata müssten solche Sachen zügig aufgenommen werden, nicht erst nach einigen Wochen oder Monaten. Macht man auch dies nicht darf einem eine schlechte Bewertung bei Amazon nicht erstaunen.

 

Fazit

Rails 3 in Action liest sich flüssig und setzt kein grosses Vorwissen voraus. Der Ansatz alles mit Test-First zu machen finde ich gut, durch die Änderungen an Cucumber sollte man das Buch aber sehr bald überarbeiten.

Ich konnte mein Ziel erreichen und meine eigene Rails-Applikation mit dem hier gelernten umsetzten. Bis diese aber in einer Produktionsumgebung lief hatte ich viele Probleme zu lösen für die mir dieses Buch keine Antwort liefern konnte.

Viele kleine Fehler (und einige grosse Lücken) machen ein sehr gutes Buchkonzept schnell zunichte. Mir bleibt die Hoffnung auf eine Version 2 die diese Probleme behebt. Bis dahin kann ich dieses Buch Anfängern leider nicht weiterempfehlen.

 

Zum Buch

Rails 3 in Action“ von Ryan Bigg und Yehuda Katz, 2011 Manning, ISBN: 978-1-93518-227-6, 592 Seiten, Englisch