it-swarm.com.de

So fordern Sie eine Ruby-Datei aus einem anderen Verzeichnis an

Ich versuche, eine Rake-Datei anzufordern, die ich in einer anderen Datei erstellt habe, die ich habe. Diese beiden Dateien befinden sich in zwei verschiedenen Verzeichnissen. Ich muss an der Spitze meiner ersten Datei mit dem Namen der zweiten Datei in den Anführungszeichen nach der Anforderung stehen. Es sagt mir, dass es solche Dateien nicht laden kann. Bedeutet das, weil es sich in einem anderen Verzeichnis befindet, kann es es nicht finden? Ich habe versucht, den vollständigen Pfad der zweiten Datei beizubehalten, aber die Datei kann immer noch nicht geladen werden. Weiß jemand, wie ich die zweite Datei in die erste laden kann?

Danke im Voraus

27

require sucht nach Dateien nur an einem Ort, der als "Ladepfad" bezeichnet wird. Sie können den Ladepfad mithilfe der globalen Variablen $LOAD_PATH in einem Skript oder einer IRB-Sitzung anzeigen. Wenn es sich nicht im Ladepfad befindet, wird es nicht gefunden. 

Ruby 1.9 führte require_relative ein, der als Ausgangspunkt den aktuellen Speicherort der Datei verwendet. 

# Will search $LOAD_PATH for file. 
require 'test/unit'
# Notice the '/' which tells it to look in the 
# 'test' folder for a file named 'unit.rb'

# Will look in current folder of file
require_relative 'my_folder/my_file'
# Will search in 'my_folder' for the file 'my_file.rb'

Beachten Sie, dass require_relative in irb nicht funktioniert. 

Beachten Sie auch, dass Sie, wenn Sie wirklich require verwenden möchten, Ihr Skript starten können, indem Sie der $LOAD_PATH-Variablen einen Ort hinzufügen.

$LOAD_PATH << File.join('users', 'yourusername', 'your_folder')
# or
$LOAD_PATH << File.dirname(__FILE__)
# The second one enables you to move the file around on your
# system and still operate correctly
require 'my_file'

Hier einige zusätzliche Dokumentationen von Ruby-Doc:

52

Aus den Dokumenten: Es wird empfohlen, "relative" zu verwenden. Docs

require_relative ergänzt die integrierte Methode erfordern, indem Sie eine Datei laden können, die relativ zu der Datei ist, die die require_relative-Anweisung enthält.

Wenn Sie require zum Laden einer Datei verwenden, greifen Sie normalerweise auf Funktionen zu, die in Ihrem System ordnungsgemäß installiert und verfügbar gemacht wurden. erfordern keine gute Lösung für das Laden von Dateien innerhalb des Projektcodes. Dies kann während einer Entwicklungsphase nützlich sein, um auf Testdaten zuzugreifen oder sogar auf Dateien zuzugreifen, die innerhalb eines Projekts "gesperrt" sind und nicht für den Außeneinsatz gedacht sind.

Wenn Sie zum Beispiel Komponententestklassen im Verzeichnis "test" und Daten dafür im Verzeichnis "test/data" des Testverzeichnisses haben, können Sie in einem Testfall eine Zeile wie diese verwenden:

require_relative "data/customer_data_1"
9
Bijendra

Möglich ist dies auch:

require './something.rb'

aus dem aktuellen Verzeichnis einschließen.

8
BladeMight

Zum Beispiel haben Sie Dateien:

chess.rb und spec/test.rb

Und Sie möchten die Datei in spec/test.rb anfordern. Benutzen: 

require_relative '../test.rb'

mit zwei Punkten. Mit einem Punkt "./" erhalten Sie die Fehlermeldung "Datei kann nicht geladen werden".

0
Alexandr