Die Programmiersprache Ruby

Blog| Forum| Wiki  


RubyGems
Datei:Rubygems_logo.png
Das offizielle Logo von RubyGems.
Entwickler: Chad Fowler, Eric Hodel,

Richard Kilmer, Jim Weirich

Aktuelle stabile Version: 2.4.1
Betriebssystem: Diverse.
Lizenz: Rubys Lizenz
Website: http://www.rubygems.org

RubyGems (engl. etwa "Ruby-Edelsteine") ist Rubys Paketverwaltung, d.h. es erlaubt dem Nutzer, sehr leicht neue Programmbibliotheken und auch ganze Programme, welche exklusiv für Ruby geschrieben worden, zu installieren, zu verwalten und auch wieder zu entfernen; Debian- und Ubuntunutzer werden das Prinzip von apt-get kennen. Software, die mittels RubyGems installiert werden kann, nennt man RubyGem oder auch nur kurz Gem und sie erfreut sich extrem großer Beliebtheit.

Inhaltsverzeichnis


Anmerkung

In vielen Fällen ist die RubyGems-Software nicht mehr aktuell. Die aktuelle RubyGems-Version ist 2.4.1, ein gem update --system sollte auf die aktuelle Version updaten. Die Versionen 1.1.x, 1.2.x, 1.5.0 und 1.5.1 von gem haben allerdings Probleme beim Update. Sollte die Meldung Nothing to update erscheinen oder nur die bereits installierte Version noch einmal installiert werden, kann das Gem rubygems-update installiert werden. Anschließend kann mithilfe des dann verfügbaren Programms update_rubygems (ohne gem davor!) die RubyGems-Software aktualisiert werden.


Installation

Ruby 1.9

Ruby 1.9.x enthält RubyGems bereits, daher besteht kein Grund für eine externe Installation. Das einzige, was hier noch empfehlenswert wäre, ist zu prüfen, ob RubyGems' Version aktuell ist und falls nicht, die Software zu updaten (benötigt evtl. Administrator- oder Root-Rechte).

# gem update --system


Ruby 1.8

Ruby 1.8 enthält RubyGems noch nicht, daher muss es extra installiert werden. Zunächst muss man sich dafür die aktuelle Version von RubyGems herunterladen; das erhaltene Archiv entpackt man und wechselt im Terminal in das neue Verzeichnis. Anschließend führt man die Datei setup.rb aus und schon ist man fertig. Konkret (erfordert eventuell Adminitrator- oder Root-Rechte):

1
2
3
$ tar -xzf rubygems-1.8.11.tgz #Entpacken des Archivs
$ cd rubygems-1.8.11           #Wechseln in das neue Verzeichnis
# ruby setup.rb                #Installieren von RubyGems


Windows-Nutzer können das Archiv selbstverständlich per GUI entpacken; RubyGems.org bietet auch ein ZIP-Archiv anstatt eines Tarballs zum Download an.

Arbeiten mit RubyGems

Nun, wenn man sich eine Software installiert hat, so möchte man sie in der Regel auch benutzen. In den folgenden Abschnitten werden wir uns mit verschiedenen Einsatzmöglichkeiten von RubyGems befassen. RubyGems ist ein Kommandozeilenwerkzeug, und seine Anwendung sieht so aus:

gem KOMMANDO [ARGUMENTE] [OPTIONEN]


Diese nicht triviale Struktur zeigt, wie leistungsfähig das Programm ist. Sämtliche möglichen Aufrufe hier zu behandeln, würde den Rahmen des Wikis sprengen, sodass wir hier nur die gängigen Kommandos behandeln. Für alle, die es genau wissen wollen, sei gem help empfohlen.

Kommando Mögliche Optionen Beschreibung
cleanup Entfernt alle Gems außer denen mit der jeweils aktuellsten (lokal installierten, nicht online verfügbaren) Version.
fetch --version VERSION Lädt ein Gem herunter und speichert es im momentanen Arbeitsverzeichnis. --version kann benutzt werden, um eine bestimmte Version herunterzuladen.
help [ARG] Gibt Hilfe zu einem speziellen Theme, z.B. einem Kommando, oder, falls ohne ARG aufgerufen, zu RubyGems selbst.
install --local, --version VERSION siehe unten. --local bewirkt, dass RubyGems das zu installierende Gem nicht im Web, sondern lokal auf dem ausführenden Rechner sucht. Mit --version kann man eine bestimmte Version eines Gems installieren.
list [name] --remote, --details Ohne name listet es alle installieten Gems auf, mit nur die, die mit name beginnen. Wird die Option --remote übergeben, so wird nicht die lokale Installation, sondern der RubyGems-Index durchsucht. --details führt zu einer ausführlichen Beschreibung.
search [name] --remote, --details Ohne name listet es alle installieten Gems auf, mit nur die, die name enthalten. Wird die Option --remote übergeben, so wird nicht die lokale Installation, sondern der RubyGems-Index durchsucht. --details führt zu einer ausführlichen Beschreibung.
server --port PORTNUM siehe unten. Mit --port kann man den Port festlegen, auf dem der Gem-Server starten soll.
uninstall siehe unten
update --system Aktualisiert alle installierten Gems auf die neueste Version. Wird --system übergeben, so wird nur RubyGems selbst aktualisiert.
which DATEI Findet heraus, ob ein require auf der angegebenen Datei möglich ist und von wo diese dann stammt.


Installation eines Gems

Nachdem man sich ein Gem herausgesucht hat, das man gerne installieren möchte, vermutlich über die Suchfunktion von RubyGems.org, kann man es wie folgt installieren:

# gem install <gemname>


Wie Das Gatter-Zeichen # schon andeutet, benötigt dieser Befehl eventuell Administrator- oder Root-Rechte. Hier ein Beispiel, das Gem Coderay unter Ubuntu Linux zu installieren:

1
2
3
4
5
6
7
8
9
? quintus@kerberos => ~
$ sudo gem install coderay
Successfully installed coderay-0.9.5
1 gem installed
Installing ri documentation for coderay-0.9.5...
Updating ri class cache with 2443 classes...
Installing RDoc documentation for coderay-0.9.5...
? quintus@kerberos => ~
$


Ein installiertes Gem kann man in jedem Ruby-Skript einfach per require einbinden; Nutzer von Ruby 1.8 müssen jedoch zuerst noch RubyGems selbst einbinden. Für Coderay schaut eine Anwendung etwa so aus:

1
2
3
4
5
6
require "rubygems" #Nur in Ruby 1.8 notwendig
require "coderay" #Einbinden von Coderay

#Aufruf durch das Gem definierter Klassen
page = CodeRay.scan("puts 'Hello, world!'", :ruby).html(:line_numbers => :inline, :wrap => :page)
puts page


Wie genau ein Gem required werden muss, hängt vom jeweiligen Gem ab und geht (hoffentlich) aus dessen Dokumentation hervor.

Deinstallation eines Gems

Hat man das Interesse an einem Gem verloren, lässt es sich ebenso einfach wieder deinstallieren:

# gem uninstall <gemname>


Auch hier sind eventuell wieder Administrator- oder Root-Rechte erforderlich. Wieder am Beispiel von Coderay:

1
2
3
4
5
6
7
8
9
10
11
? quintus@kerberos => ~
$ sudo gem uninstall coderay
Remove executables:
        coderay, coderay_stylesheet

in addition to the gem? [Yn]  y
Removing coderay
Removing coderay_stylesheet
Successfully uninstalled coderay-0.9.5
? quintus@kerberos => ~
$


Hier kann man auch schön erkennen, dass Coderay nicht nur eine Programmbibliothek, sondern auch ein Kommandozeilenprogramm installiert hatte. Wer mehr dazu wissen möchte, liest die Dokumentation von Coderay.

Gem-Dokumentation

Nahezu jedes Gem ist mit mithilfe von Kommentaren dokumentiert, welche vom Ruby-Dokumentationstool RDoc ausgelesen und übersichtlich dargestellt werden können. Dies geschiet automatisch beim Installationsvorgang eines Gems, sodass man die Dokumentation zu einem Gem auch lokal einsehen kann, anstatt die Website eines Gems zu besuchen. Zunächst startet man dazu den Gem-Server:

$ gem server


Die Ausgabe des Programms zeigt, auf welchem Port RubyGems den Gem-Server gestartet hat; in der Regel handelt es sich dabei um den Port 8808. Steuert man also in seinem Webbrowser die Addresse http://localhost:8808 an, so bekommt man eine Übersicht über alle installierten Gems mit ihren zugehörigen Dokumentationen und Webseiten. Stoppen kann man den Gem-Server mittels [CTRL] + [C] im Terminal.

Konfiguration

RubyGems besitzt eine Konfigurationsdatei, über die sein Verhalten geändert werden kann. Sie heißt .gemrc und befindet sich im jeweiligen Benutzerverzeichnis. Es handelt sich hierbei um eine YAML-Datei, die wie folgt aufgebaut ist:

schl��ssel: wert


Schlüssel, die mit einem Doppelpunkt beginnen, beeinflussen das allgemeine Verhalten von RubyGems; jene ohne Doppelpunkt müssen ein Kommandoname sein und beeinflussen nur dieses Kommando. Zunächst die allgemeinen Schlüssel:

Schlüssel Mögliche Werte Beispiel Beschreibung Standardwert
:sources Liste
1
2
3
:sources: 
  - http://rubygems.org
  - http://gems.github.com
Von allen URLs, die hier aufgeführt sind, kann RubyGems Gems installieren.
   - http://rubygems.org/
:verbose true, false, :really
:verbose: false
Gibt an, wie genau RubyGems Statusmeldungen ausgibt.
:verbose: true
:update_sources true, false
:update_sources: false
Wenn true, prüft RubyGems automatisch, ob neuere Versionen von Gems zur Verfügung stehen. Selbstständig installiert wird aber nichts.
:update_sources: true
:backtrace true, false
:backtrace: false
Gibt an, ob RubyGems ausführliche Backtraces bei Fehlern anzeigt.
:backtrace: true
:gempath Liste
1
2
3
:gempath: 
  - /home/user/meinegems
  - /opt/gems
Rubygems schaut in diesen Verzeichnissen nach Gems.
1
2
3
:gempath: 
  - /pfad/zu/ruby/lib/ruby/gems/1.9.1
  - /home/benutzername/.gem/ruby/1.9.1

Wie bereits gesagt, kann der Schlüssel auch ein Gem-Kommando sein. In diesem Fall gibt wert an, welche Optionen immer an das Kommando übergeben werden sollen. Will man etwa, dass niemals RI-Daten installiert werden, so verbietet man gem install und gem update dies mithilfe von --no-ri. Damit man das aber nicht immer wieder von Hand eingeben muss, kann man es in die .gemrc schreiben, etwa so:

1
2
install: --no-ri
update: --no-ri


Siehe auch