Die Rails-Entwicklung mit Mongrel beschleunigen

Sie möchten an Ihrem Rails-Projekt im Entwicklungsmodus arbeiten und etwas Schnelleres verwenden als den fest eingebauten Webserver WEBrick.

Lösung

Eine ausgezeichnete Alternative zu WEBrick ist Mongrel. Mongrel ist deutlich schneller als WEBrick und wesentlich einfacher zu installieren als die LightTPD/FastCGI-Kombination. Sie benötigen eine funktionierende Build-Umgebung, um Mongrel unter Linux oder Mac OS X installieren zu können. Windows-Nutzer erhalten ein vorkompiliertes Gem. Nutzer Debian-basierter Linux-Distributionen müssen die ruby-dev– und build-essential-Pakete installiert haben, und Mac OS X-Nutzer müssen Apples XCode-Tools installiert haben. Sobald alle Voraussetzungen erfüllt sind, installieren Sie Mongrel mit Hilfe von RubyGems:

$ sudo gem install mongrel
 
Dann starten Sie Mongrel im Stammverzeichnis der Anwendung als Daemon (als Hintergrundprozess):
$ mongrel_rails start -d
 

Ihre Anwendung ist nun an Port 3000 verfügbar, genau wie bei der WEBrick-Standardeinstellung (http://localhost:3000). Um den Server anzuhalten, geben Sie Folgendes ein:

$ mongrel_rails stop
 

Diskussion

Mongrel ist ein schneller Webserver. Er wurde in Ruby geschrieben (mit einigen C-Erweiterungen). Er ist einfach zu installieren und kann als einfacher Entwicklungsserver dienen. Er kann für größere Produktionsanwendungen aber auch hinter einem Load-Balancer geclustert werden. Mongrel kann auch mit anderen Ruby-Frameworks, wie etwa Og+Nitro und Camping, verwendet werden, ist aber für den Einsatz von Rails-Anwendungen besonders populär. Es ist sehr wahrscheinlich, das script/server in naher Zukunft neben WEBrick und LightTPD auch Mongrel unterstützen wird.

Die Lösung zeigt Mongrel als Daemon-Prozess. Sie können ihn auch im Vordergrund ausführen, erhalten aber nicht die gleichen nützlichen Ausgaben wie bei WEBrick. Um diese Informationen zu erhalten, geben Sie den folgenden Befehl ein:
tail -f log/development.log
 
Die Installation des Mongrel-Plugins fügt den Befehl mongrel_rails in Ihren Pfad ein. Für eine Liste der verfügbaren Optionen geben Sie nur den Befehl ein:
$ mongrel_rails
 
Usage: mongrel_rails <command> [options]

Available commands are:

 - restart

 - start

 - stop



 
Each command takes -h as an option to get help.
 
Mongrel besitzt seinen eigenen Satz von Plugins. Ihre Ausgabe kann anders aussehen, je nachdem, welche Mongrel-Plugins installiert wurden (etwa mongrel_status und mongrel_cluster). Mit dem grundlegenden Mongrel-Gem verfügen Sie über start, stop und restart.

Eine vollständige Liste der Optionen des start-Befehls erhalten Sie mit -h:
$ mongrel_rails start -h
 
Usage: mongrel_rails <command> [options]

    -e, --environment ENV            Rails environment to run as

    -d, --daemonize                  Whether to run in the background or 

                                     not

    -p, --port PORT                  Which port to bind to

    -a, --address ADDR               Address to bind to

    -l, --log FILE                   Where to write log messages

    -P, --pid FILE                   Where to write the PID

    -n, --num-procs INT              Number of processors active before 

                                     clients denied

    -t, --timeout TIME               Timeout all requests after 100th 

                                     seconds time

    -m, --mime PATH                  A YAML file that lists additional 

                                     MIME types

    -c, --chdir PATH                 Change to dir before starting 

                                     (will be expanded) -r, --root PATH

                                     Set the document root (default 

                                     'public')

    -B, --debug                      Enable debugging mode

    -C, --config PATH                Use a config file

    -S, --script PATH                Load the given file as an extra 

                                     config script.

    -G, --generate CONFIG            Generate a config file for -C

        --user USER                  User to run as

        --group GROUP                Group to run as

    -h, --help                       Show this message

         --version                   Show version

 
Wenn Sie mit Windows arbeiten, können Sie Mongrel einfach als Dienst konfigurieren:
$ mongrel_rails_service install -n blog -r c:datablog 
 
                                -p 4000 -e production
 
Sie starten den Dienst dann mit:
$ mongrel_rails_service start -n blog
 
Sie können den Dienst sogar über die Verwaltung in der Systemsteuerung pflegen.

Dieses Rezept stammt aus dem Rails Kochbuch, veröffentlicht beim O’Reilly Verlag

Starthilfe bei der Entwicklung durch Scaffolding

Sie haben eine gute Vorstellung von einem neuen Projekt und haben eine grundlegende Datenbank entworfen. Sie wollen eine grundlegende Rails-Anwendung schnell ans Laufen bringen.

Lösung

Sobald Sie Ihre Datenbank angelegt und Rails für die Kommunikation mit der Datenbank konfiguriert haben, können Sie Rails das generieren lassen, was als Scaffolding bezeichnet wird. Scaffolding generiert eine grundlegende CRUD-Webanwendung (»Create, Read, Update and Delete«, zu Deutsch etwa »Anlegen, Lesen, Aktualisieren und Löschen«), einschließlich des Controller- und View-Codes, der mit Ihrem Modell interagiert. Wenn Sie Scaffolding generieren, erhalten Sie eine voll funktionsfähige, wenn auch grundlegende Webanwendung, die als Ausgangspunkt für die weitere Entwicklung dienen kann.

Es gibt zwei Möglichkeiten, das Scaffolding unter Rails zu generieren. Die erste besteht darin, Rails den gesamten für die Anwendung benötigten View- und Controller-Code hinter den Kulissen dynamisch generieren zu lassen. Sie erledigen das mit Hilfe der scaffold-Methode des Action Controllers. Die zweite Möglichkeit ist der Einsatz des Rails Scaffolding-Generators für die Generierung des Scaffolding-Codes in Ihrem Anwendungsverzeichnis.
Um zu zeigen, wie das Scaffolding funktioniert, wollen wir eine Rails-Anwendung anlegen, die eine Liste von Programmiersprachen zusammen mit einer Beschreibung speichert. Wir beginnen mit der Einrichtung Ihrer Datenbank. Generieren Sie ein Datenbank-Migrationskript mit:

$ ruby script/generate migration build_db
 
Das generiert eine Datei namens 001_build_db.rb im db/migrate-Verzeichnis Ihrer Anwendung. Öffnen Sie diese Datei, und fügen Sie Folgendes hinzu:
db/migrate/001_build_db.rb:
class BuildDb < ActiveRecord::Migration
 


  def self.up

    create_table :languages, :force => true do |t|

      t.column :name, :string 

      t.column :description, :string 

    end

  end

 


  def self.down
 
    drop_table :languages

  end

end
 
Führen Sie dieses Migrationsskript aus, um die languages-Tabelle in Ihrer Datenbank aufzubauen:

$ rake db:migrate
 
Sobald Ihre Datenbank angelegt worden ist und die Rails-Anwendung die Verbindung zu ihr herstellen kann, gibt es zwei Möglichkeiten, das Scaffolding zu generieren. Die erste besteht in der Verwendung der scaffold-Methode. Legen Sie ein Modell namens language.rb an:
$ ruby script/generate model language
 
Nun legen Sie einen Controller namens language_controller.rb an:
$ ruby script/generate controller language

 
Diese beiden Generatoren zeigen Ihnen, welche neuen Dateien zu Ihrer Rails-Anwendung hinzugefügt wurden. Öffnen Sie den neu angelegten language-Controller, und fügen Sie den folgenden Aufruf in die scaffold-Methode ein:
app/controllers/language_controller.rb:

class LanguageController < ApplicationController

  scaffold :languages

end
 
Hier übergeben Sie der scaffold-Methode ein Ihr Modell repräsentierendes Symbol, in diesem Fall also :languages. Dieser einzelne Aufruf weist Rails an, den gesamten Code zu generieren, der notwendig ist, um CRUD-Operationen auf die languages-Tabelle anzuwenden.

Um sich das Ergebnis anzusehen, starten Sie Ihren Webserver mit:
$ ruby script/server
 
und bewegen sich mit dem Webbrowser an http://localhost:3000/language.

Die zweite Möglichkeit für den Einsatz des Rails-Scaffoldings bietet der scaffold-Generator. Wenn Sie das Scaffolding mit Hilfe des Generators erzeugen, müssen Sie nicht explizit ein Modell oder einen Controller anlegen, wie das bei der vorigen Technik der Fall war. Sobald die Datenbank eingerichtet und konfiguriert ist, führen Sie einfach den folgenden Befehl im Stammverzeichnis Ihrer Anwendung aus:
$ ruby script/generate scaffold language
 
Dieser Befehl erzeugt eine Reihe physikalischer Dateien innerhalb Ihres Anwendungsverzeichnisses, einschließlich der Modell-, Controller- und einer Reihe von View-Dateien. Die Ergebnisse dieser Scaffolding-Technik sind, aus Sicht des Browsers, identisch mit dem ersten Ansatz. Sie erhalten eine grundlegende, funktionierende Webanwendung, die als Basis für die weitere Entwicklung dienen kann.

Diskussion

Viele Leute lassen sich dazu verführen, Rails einmal auszuprobieren, nachdem sie Videos über die unglaublich schnelle Codegenerierung gesehen haben. Andere fühlen sich durch die Vorstellung, dass ein Framework automatisch Code generiert, eher abgestoßen.
Bevor Sie basierend auf dem Scaffolding ein Urteil über Rails abgeben, müssen Sie verstehen, welcher Code für Sie generiert wird (und wie) und wie das Scaffolding in der realen Rails-Entwicklung eingesetzt wird.

Die meisten erfahrenen Rails-Entwickler betrachten das Scaffolding bloß als hilfreichen Einstieg. Sobald das Scaffolding erzeugt wurde, generieren sie den Großteil der Anwendung von Hand. Für Rails-Neulinge kann das Scaffolding eine unverzichtbare Lernhilfe sein, insbesondere wenn der Scaffolding-Code mit der generator-Technik erzeugt wurde. Der generierte Code enthält sehr viel Rails-Code, der die Verwendung der gängigsten Bereiche des Frameworks demonstriert.

Abbildung 2-1 zeigt einige Screenshots der Art von Interface, die durch das Scaffolding generiert wird.

Abbildung 2-1

Durch Rails generiertes CRUD-Scaffolding

Eine einfache Möglichkeit, das Standardaussehen etwas aufzupeppen, bietet die Modifikation des Standard-Stylesheets. Wie Sie sehen können, ist das Design dieser Seiten ohne Anpassungen bestenfalls für die Backend-Administration geeignet.

Dieses Rezept stammt aus dem Rails Kochbuch, veröffentlicht beim O’Reilly Verlag

Ruby Debugging in 30 Sekunden

Chad Woolley hat in seinem Blog einen hilfreichen Artikel über ruby-debug veröffentlicht. “ruby-debug in 30 seconds (we don’t need no stinkin’ GUI!)”

In dem Artikel wird in sehr kurzer Form die Bedienung des Debuggers gezeigt.

Wie der Titel bereits ankündigt, basiert der Artikel auf keiner GUI. Alle Bespiele werden auf der Konsole aufgelistet.

Weiterhin findet ihr auf der Seite ein Cheatsheet in dem alle Befehle zusammengefasst vorliegen.

Artikel:
http://pivots.pivotallabs.com/users/chad/blog/….

Cheatsheet: http://cheat.errtheblog.com/s/rdebug/

Die ersten Rails 2.0 Tutorials

An den Namen der Rails Tutorials auf OReilly hat Fabia Akita die ersten Rails 2.0 Tutorials geschrieben und auf seiner Seite veröffentlicht.

Akitas Tutorials behandeln in den beiden Tutorials die neuen Features und Änderungen die in dieser Version hinzugekommen sind.

Im ersten Teil geht er angefangen von der Installation der Gems über “Sexy Migrations”, den Routes-Anpassungen zu den Views über.

Im zweiten Teil werden der neue Query-Cache, Assets, Ajax Helper, Debugging, Foxy Fixtures und Debugging behandelt. Danach wird das Tutorial mit Deprecations und REST abgerundet.

Teil 1: http://www.akitaonrails.com/2007/12/12/rolling-with-rails-2-0-the-first-full-tutorial

Teil 2: http://www.akitaonrails.com/2007/12/12/rolling-with-rails-2-0-the-first-full-tutorial-part-2

Rails-Konf Video: Prosa, Lyrik, Ruby und Rails (Nicolai Reuschling)

Über die Videopräsentation
Jahrhundertelang schreibt die Menschheit schon Prosa und Lyrik – in den meisten Fällen für jedermann lesbar und verständlich. Seit Einführung von Programmiersprachen und formalen Spezifikationen werden jetzt aber auf einmal (Quell-) Texte und Dokumente erstellt, die von Laien meist gar nicht und von Fachleuten oft nur mit Mühe verstanden werden.

Im besten Fall erinnert sich der Autor noch an Details und Zusammenhänge. Einzig und allein der Compiler/Interpreter/Prozessor kann mit der Abfolge von Symbolen und Zeichen etwas Sinnvolles anfangen.

Die Herausforderung beginnt also lange bevor ein Fehler auftritt. Schwierig wird es dann so richtig, wenn ein Computer nicht mehr das leistet, wofür er (einst) einmal programmiert wurde oder wenn ein Programm an neue Herausforderungen angepasst werden muss.

Ruby als Programmiersprache ist für seine leicht verständliche Syntax bekannt.

Ruby-Kommandos lassen die Grenzen zwischen Anforderungsspezifikation und Quellcode verschwindend gering werden. Ruby on Rails geht sogar noch einen Schritt weiter und er- laubt es Entwicklern, ganze Applikationen „lesbar“ zu „gestalten“. Gestalten darf in diesem Zusammenhang gerne als „schöpferisch, kreativ“ verstanden werden.

Der Vortrag erörtert die Notwendigkeit von verständlichem Quellcode und belegt an Beispielen, wie mit Ruby und Ruby on Rails die Wartbarkeit von Applikationen und die Produktivität von Entwicklern gesteigert werden kann. Weiterhin wird auf mögliche Veränderungen des Entwicklungsprozesses eingegangen.

Über den Autor
Nicolai Reuschling studiert Informatik an der Hochschule Darmstadt und beschäftigt sich seit ein paar Jahren mit agiler Softwareentwicklung und Ruby. In seiner Bachelor-Thesis beschreibt er aktuell, welche Wartungsanforderungen an Webapplikationen gestellt werden und wie Ruby (und natürlich Ruby on Rails) diesen Anforderungen entgegentritt.

Link: http://www.loroma.com/loroma/movie.faces?movie=4

Rail-Konf Video: Sicherheit von Ruby on Rails (Heiko Webers)

Über die Videopräsentation
Jeden Tag stehlen kriminelle Hacker zahlreiche Kreditkartennummern, vertrauliche Informationen, Passwörter und alles andere, was sie zu Geld machen können. Sie verunstalten Webseiten, beinträchtigen die Verfügbarkeit von Web Anwendungen oder löschen Daten. Viele Unternehmen sind heute vom Internet abhängig, der Bereich der Sicherheit sollte deshalb nicht ignoriert werden. Viele Entwickler sehen Rails als ein „sicheres“ Framework an. Das mag stimmen, da weniger Code geschrieben werden muss, und weniger Code bedeutet einen besseren Überblick. Tatsächlich aber hängen die meisten Sicherheitsprobleme in Web Anwendungen nicht von der eingesetzten Programmiersprache oder dem Framework ab, sondern betreffen Web Anwendungen im Allgemeinen. Dieser Vortrag behandelt die bekanntesten Angriffe, wie Interpreter Injection im Bezug auf Rails (Cross-Site Scripting (XSS), SQL Injection, Logic Injection), verbreitete Konfigurationsfehler, Session- und Benutzerverwaltung, Ajax-Sicherheit, Sicherheitstipps und mehr. Rails hat gute Sicherheits-Features, man muss sie nur einsetzen.

Über den Autor
Heiko Webers ist freiberuflicher Berater und Softwareentwickler im Bereich von Internet-Anwendungen. Er erforscht neue Entwicklungs- und Internettechnologien, Knowledge Engineering und Softwaresicherheit. Im Rahmen seiner Abschlussarbeit an der Universität beschäftigte er sich mit der Sicherheit von Internet Anwendungen im Hinblick auf Ruby On Rails. Vor kurzem startete er mit der Open Web Application Security Project (OWASP) das Ruby On Rails Security Project (www.rorsecurity.info).

Link: http://www.loroma.com/loroma/movie.faces?movie=12

Rails-Konf Video: Amazon S3/EC2 (Jonathan Weiss)

Über die Videopräsentation
Amazon bietet mit der Elastic Compute Cloud (Amazon EC2) und dem Simple Store Service (Amazon S3) zwei Web-Services an, die es anderen Entwicklern ermöglichen von der Amazon Plattform in Sachen on-demand Skalierung, Performance und Redundanz zu profitieren. Amazon S3 stellt dabei „storage for the internet“ dar, also unbegrenzter Speicherplatz in Amazons Datacentern, der über eine REST-API befüll- und aufrufbar ist. Amazon EC2 bietet Entwicklern die Möglichkeit on-demand beliebig viele Instanzen von virtuellen Maschinen per Web-Services zu starten und zu kontrollieren.

Dieser Vortrag soll demonstrieren, welchen Nutzen man von S3 und EC2 ziehen kann und wie einfach diese Web-Services in die eigene Rails Applikationen einzubinden sind. Nach einem Überblick über S3 und EC2 werden konkrete Einsatzszenarien besprochen und deren Implementation in Rails dargestellt. Die Szenarien reichen dabei von S3 als Backendspeicher bis zu On-Demand Application Server mit Capistrano und EC2.

Über den Autor
Jonathan Weiss ist technischer Projektleiter bei der Peritor Wissensmanagement GmbH. Dort ist er verantwortlich für die Entwicklung von web-basierten Wissensmanagement-Systemen und die Beratung im Bereich der Software-Entwicklung. Daneben ist er freiberuflicher Entwickler und arbeitet bereits seit über 2 Jahren mit Rails in der Praxis. Unter anderem ist er einer der Verantwortlichen von Meinprof.de, eine der ersten deutschen Rails-Seiten.

Rails-Konf Video: Caching in Rails (Tammo Freese)

Über die Videopräsentation
Caching ist eines der wichtigsten Mittel, eine Ruby on Rails-Anwendung zu beschleunigen. Tammo Freese gibt einen Überblick über die Caching-Mechanismen in Rails, er erläutert, wie Caching getestet werden kann, und zeigt typische Probleme und Lösungen beim Caching in Rails-Anwendungen.

Über den Autor
Tammo Freese ist freiberuflicher Berater, Trainer und Extreme Programmer. Sein Schwerpunkt ist die agile Entwicklung mit Ruby on Rails, AJAX und Eclipse. Zur Zeit arbeitet er in Rails-Projekten. In seiner spärlichen Freizeit forscht er an einer Refactoring-Unterstützung im Software-Konfigurationsmanagement.

Link: http://www.loroma.com/loroma/movie.faces?movie=9

Rails-Konf Video: Ferret – Search Engine for Ruby (Jens Kraemer)

Über die Videopräsentation
Eine funktionierende Volltextsuche ist für viele Webapplikationen unerlässlich. Doch allzu schnell gelangt man an die Grenzen von LIKE-Statements und MySQL-Volltextindizes.

Ferret ist eine hochperformante Volltextsuchmaschine für Ruby. Im Funktionsumfang vergleichbar mit der aus der Java-Welt bekannten Lucene-Bibliothek, übertrifft das in C implementierte Ferret sein Vorbild oft sogar, was die Geschwindigkeit angeht.

Acts_as_ferret ist ein Rails-Plugin mit dem Ziel, seinem Benutzer die Verwendung von Ferret so leicht wie möglich zu machen. Ein Einzeiler in der Model-Klasse sorgt dafür, dass der gesamte Datenbestand komfortabel und schnell durchsucht werden kann. Dabei wird der Index stets auf dem aktuellen Stand gehalten, wenn Datensätze hinzukommen, aktualisiert oder gelöscht werden.

Dieser Vortrag gibt zunächst Einblick in die Funktionsweise und Besonderheiten von Ferret. Anschließend wird gezeigt, wie man mittels acts_as_ferret typische Anwendungsfälle von erweiterten Suchformularen über Live-Searches bis hin zur Model-übergreifenden Indizierung von Objekten realisieren kann. Abschließend wird auf Besonderheiten im Produktivbetrieb eingegangen.

Über den Autor
Jens Krämer ist Softwareentwickler bei webit! in Dresden und auch als Freelancer im Bereich Rails unterwegs. Seit Anfang 2006 ist er Maintainer von acts_as_ferret, einem Rails-Plugin dass die Nutzung von Ferret in Rails-Anwendungen extrem vereinfacht. Ferret selbst ist im Prinzip eine Lucene-Implementierung in C für Ruby, wobei die API mittlerweile den von Lucene geerbten Java-Stil abgelegt hat.

Link: http://www.loroma.com/loroma/movie.faces?movie=7

Rails-Konf Video: Hobo – Rails Application Builder (Niko Dittmann)

Über die Videopräsentation
Hobo ist ein Application-Builder auf Rails. Hobos Ziel ist es, nicht nur den ersten Prototypen einer Applikation oder ein Admin-Interface in kürzester Zeit zu erzeugen, sondern dem Entwickler bis zur Produktionsreife der Applikation die Arbeit zu erleichtern. Dazu trägt eine exzellente Templatesprache (DRYML) ebenso bei wie die Möglichkeit, einzelne Model- und Controller-Methoden anzupassen oder zu überschreiben, ohne an Flexibilität zu verlieren.

Niko Dittmann demonstriert in seinem Vortrag anhand einer einfachen, live programmierten Applikation sowohl den Kick-Start, als auch Anpassungen an Models, Views und Controllern.

Über den Autor
Niko Dittmann arbeitet seit fast zwei Jahren mit Rails und programmierte unter anderem ein kleines CMS, einfache Shop- oder Seminarbuchungssysteme und eine SMS-Projektionssoftware auf Rails-Basis. In den letzten Monaten setzte er mehrere Projekte mit Hilfe von Hobo um.

Link: http://www.loroma.com/loroma/movie.faces?movie=14