Die Programmiersprache Ruby (German Edition)
besitzt. Lesen Sie bitte „10.5 Sicherheit“ , wenn Sie mehr Informationen zu
$SAFE
und Rubys Sicherheitssystem erhalten wollen. (Beachten Sie, dass
require
sich bei einem
$SAFE
-Wert größer als
0
weigert, eine Datei mit einem »verschmutzten« (englisch: tainted ) Dateinamen oder aus einem für jedermann zugänglichen Verzeichnis zu laden. Theoretisch sollte es allerdings für
require
sicher sein, Dateien mit einem reduzierten
$SAFE
-Level zu laden.)
Die folgenden Unterabschnitte enthalten weitere Details zum Verhalten von
load
und
require
.
7.6.1 Der Load-Pfad
Rubys Load-Pfad ist ein Array, auf das Sie über eine der beiden globalen Variablen
$LOAD_PATH
und
$:
zugreifen können. (Die Eselsbrücke für letztere Variable ist, dass Doppelpunkte als pfadtrennende Zeichen in Unix-artigen Betriebssystemen verwendet werden.) Jedes Element des Array ist der Name eines Verzeichnisses, in dem Ruby nach zu ladenden Dateien sucht. Verzeichnisse am Anfang des Array werden vor den Verzeichnissen geladen, die am Ende des Array stehen. Die Elemente von
$LOAD_PATH
müssen in Ruby 1.8 Strings sein, aber in Ruby 1.9 kann es sich um Strings oder beliebige Objekte handeln, die eine Methode
to_path
bereitstellen, die einen String zurückgibt.
Der Standardwert von
$LOAD_PATH
hängt von Ihrer Ruby-Implementierung ab, vom Betriebssystem und sogar davon, wo Sie Ruby in Ihrem Dateisystem installiert haben. Es folgt ein typischer Wert für Ruby 1.8, ausgelesen mit
ruby -e 'puts $:'
:
/usr/lib/site_ruby/1.8
/usr/lib/site_ruby/1.8/i386-linux
/usr/lib/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i386-linux
.
Im Verzeichnis /usr/lib/ruby/1.8/ ist die Standardbibliothek von Ruby installiert. Das Verzeichnis /usr/lib/ruby/1.8/i386-linux/ enthält die Linux-Binärerweiterungen für die Standardbibliothek. Die site_ruby -Verzeichnisse im Pfad werden für Site-spezifische Bibliotheken genutzt, die Sie eventuell installiert haben. Beachten Sie, dass Site-spezifische Verzeichnisse als Erstes durchsucht werden, was bedeutet, dass Sie die Standardbibliothek durch hier installierte Dateien überschreiben können. Das aktuelle Arbeitsverzeichnis ».« befindet sich am Ende des Suchpfads. Dabei handelt es sich um das Verzeichnis, aus dem heraus ein Benutzer Ihr Ruby-Programm aufruft — es handelt sich nicht notwendigerweise um das Verzeichnis, in dem Ihr Ruby-Programm installiert ist.
In Ruby 1.9 ist der Standard-Load-Pfad komplizierter. Hier sehen Sie einen typischen Wert:
/usr/local/lib/ruby/gems/1.9/gems/rake-0.7.3/lib
/usr/local/lib/ruby/gems/1.9/gems/rake-0.7.3/bin
/usr/local/lib/ruby/site_ruby/1.9
/usr/local/lib/ruby/site_ruby/1.9/i686-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/vendor_ruby/1.9
/usr/local/lib/ruby/vendor_ruby/1.9/i686-linux
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/1.9
/usr/local/lib/ruby/1.9/i686-linux
.
Eine kleinere Änderung im Load-Pfad von Ruby 1.9 ist die Aufnahme der vendor_ruby -Verzeichnisse, die nach site_ruby und vor der Standardbibliothek durchsucht werden. Sie sind dafür gedacht, Anpassungen von Betriebssystemherstellern aufzunehmen.
Die wichtigste Änderung des Load-Path in Ruby 1.9 ist die Aufnahme der RubyGems-Installationsverzeichnisse. Im hier gezeigten Pfad sind die ersten beiden durchsuchten Verzeichnisse vom rake -Paket, das mit dem gem -Befehl des RubyGems Package Management System installiert wurde. Es gibt in diesem Beispiel nur ein installiertes Gem, aber wenn Sie viele Gems auf Ihrem System haben, kann Ihr Standard-Load-Path recht lang werden. (Wenn Sie Programme ausführen, die keine Gems nutzen, können Sie sie ein wenig schneller machen, indem Sie Ruby mit der Option
--disable-gems
aufrufen. Dadurch werden diese Verzeichnisse nicht dem Load-Path hinzugefügt.) Wenn mehr als eine Version eines Gem installiert ist, wird die Version mit der höchsten Versionsnummer in den Standard-Load-Path aufgenommen. Mithilfe der Methode
Kernel.gem
können Sie das ändern.
RubyGems ist in Ruby 1.9 eingebaut: Der Befehl gem kommt mit Ruby mit und kann genutzt werden, um neue Pakete zu installieren, deren Installationsverzeichnisse dann automatisch dem Standard-Load-Path hinzugefügt werden. In Ruby 1.8 musste RubyGems separat installiert werden (in manchen Distributionen von Ruby 1.8 ist es allerdings automatisch enthalten), und die Installationsverzeichnisse der Gems werden nicht automatisch dem Load-Path hinzugefügt. Stattdessen benötigen Programme in Ruby 1.8 das Modul
rubygems
.
Weitere Kostenlose Bücher