Die Programmiersprache Ruby

Blog| Forum| Wiki  

Rake ist ein Aufgaben-Automatisierungswerkzeug. Ursprünglich nur eine Ruby-Variante des *nix-Buildtools make gedacht, ist Rake mittlerweile zum De-facto-Standard für Projektverwaltung in Ruby avanciert.

Inhaltsverzeichnis

Installation

Ab Ruby 1.9 wird Rake bereits mitgeliefert. Frühere Versionen müssen Rake über RubyGems installieren:


# gem install rake


Verwendungen

Rake wird größtenteils zur Verwaltung von Gems verwendet. Es erstellt hier zumeist aus den einzelnen Quelldateien anhand einiger Anweisungen und einer Gemspec die fertige .gem-Datei. In Gems, die C-Extensions beinhalten, ist Rake oftmals auch noch für das Kompilieren der Extension verantworlich.

Neben diesen Anwendungen kann man Rake aber auch für jegliche öfter anfallende Arbeiten benutzen, beispielsweise um sich den aktuellen Ruby-Development-Snapshot herunterzuladen und zu installieren.

So geht's

Rake basiert auf Tasks, also Aufgaben, die in einer Rakefile beschrieben werden. Um also eine Rakefile zu erstellen, wird als erstes eine Datei namens Rakefile oder Rakefile.rb erstellt, in die man einträgt:


require "rake"

Damit holt man sich Rakes Methoden in die Datei. Dann kann man auch schon Tasks mit der Methode task definieren:

1
2
3
4
5
6
require "rake"

desc "Says hello"
task :hello do
  puts "Hello from Rake"
end

Mithilfe von desc (kurz für engl. description, Beschreibung) geben wir eine Beschreibung des Tasks an. Um unseren Task nun auszuführen, navigieren wir ins das Verzeichnis mit der Rakefile und führen rake hello aus:

1
2
3
4
$ rake hello
(in /home/marvin)

Hello from Rake

Um uns alle verfügbaren Tasks anzeigen zu lassen, verwenden wir rake -T.

1
2
3
4
$ rake -T
(in /home/marvin)

rake hello          # Says hello


Besondere Beachtung verdient der Task :default. Ist er definiert, so wird er aufgerufen, wenn rake ohne Argumente aufgerufen wird:

1
2
3
4
5
6
7
8
9
require "rake"

desc "Says hello"
task :hello do
  puts "Hello from Rake"
end

desc "Same as :hello"
task :default => :hello


Mithilfe von => zeigen wir Rake, dass der Task :default auf dem Task :hello basiert, dieser also zuerst ausgeführt werden muss. Da wir keinen eigenen Codeblock für :default bestimmt haben, ist nach dem Ausführen von :hello schluss. Natürlich ist es auch möglich, einen Task auf mehreren basieren zu lassen. Beispielsweise ist ein solcher Task nicht selten:

1
2
3
4
5
6
#...Diverse andere Tasks...

desc "Builds and publishes this gem"
task :default => [:clobber, :compile, :test, :rdoc, :publish] do
  puts "Finished publishing. "
end

Dieser Task räumt zunächst das Projektverzeichnis auf, dann kompiliert er eine C-Extension, führt dazugehörige Unit Tests aus, erstellt die Dokumentation und veröffentlicht den Gem. Zuletzt gibt er die Meldung "Finished publishing. " aus.

Besonderheiten

Rake bietet ein paar Besonderheiten, vornehmlich ein paar Extra-Methoden zur Verwendung. Zum einen sind in einer Rakefile alle Methoden des Moduls FileUtils verfügbar, die außerdem standardmäßig das :verbose-Flag gesetzt haben. Außerdem gibt es eine Methode sh, die Betriebssystemkommandos durchführt und eine Methode ruby, die dem Aufruf des Ruby-Interpreters auf der Kommandozeile entspricht.

Vorsicht bei fehlender Rakefile

Wird rake aufgerufen und es befindet sich keine Rakefile im aktuellen Arbeitsverzeichnis, begibt es sich auf die Suche. Dafür durchsucht es alle Elternverzeichnisse bis hinauf nach / (oder C:\ auf Windows), was nicht selten dazu führt, dass man eine völlig andere Rakefile erwischt, als man eigentlich haben wollte. Aus diesem Grunde zeigt rake beim Aufruf auch immer als erste Zeile an, in welchem Verzeichnis es die Rakefile gefunden hat.

Abbruch von Taskketten

Definiert man einen Task, der auf einigen anderen Tasks basiert, von denen während der Ausführung einer fehlschlägt, so bricht Rake die gesamte Taskkette ab. D.h., wenn :default zum Beispiel auf :compile und :test basiert, und :compile fehlschlägt, wird Rake :test nicht mehr durchführen.

Vordefinierte Rake-Tasks

Einige Tasks muss man nicht selbst definieren, sie werden von Rake bereits direkt angeboten. Sie heißen:

  • rake/gem: Gem-Erstellungs-Task
  • rake/rdoc: Dokumentations-Erstellungs-Task
  • rake/clean: Aufräumtask
  • rake/test: Führt Unit Tests durch.

Als Gem rake-compiler gibt es außerdem

Alle diese Tasks können über ein entsprechendes require eingebunden werden.

1
2
3
require "rake/gem"
require "rake/rdoc"
#...

Die meisten dieser Tasks brauchen einige Extra-Informationen, die man in Rakes Dokumentation nachlesen kann.

Siehe auch