Warum entfernt Ruby 1.9.2 "." Aus LOAD_PATH, und was ist die Alternative?
Den neuesten änderungen zu Ruby 1.9.2 nicht mehr das aktuelle Verzeichnis .
Teil Ihrer LOAD_PATH
. Ich habe eine nicht-triviale Anzahl der Rakefiles, die davon ausgehen, dass .
ist Teil der LOAD_PATH
so dass dieser brach (Sie berichtet, "no such file to load" für alle verlangen, dass Aussagen, die auf der Grundlage der Projekt-Pfad). War es eine Besondere Begründung dafür?
Als für ein Update, hinzufügen $: << "."
überall funktioniert, aber es scheint unglaublich hacky und ich will nicht, das zu tun. Was ist der bevorzugte Weg, um meine Rakefiles 1.9.2+ kompatibel?
InformationsquelleAutor der Frage John Feminella | 2010-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es wurde als "Sicherheit" Risiko.
Können Sie rund um es durch die Verwendung von absoluten Pfaden
oder tun
oder mit
oder das hinzufügen eines "include" - Verzeichnis
oder der gleichen, mit irb;
InformationsquelleAutor der Antwort rogerdpack
Gibt es zwei Gründe:
Beide basieren auf dem gleichen Prinzip zugrunde: im Allgemeinen, Sie können einfach nicht wissen, was das aktuelle Verzeichnis ist, wenn Ihr code ausgeführt wird. Das bedeutet, dass, wenn Sie eine Datei aus und hängen Sie es in das aktuelle Verzeichnis, haben Sie keine Möglichkeit der Kontrolle, ob die Datei noch da sein werden, oder ob es die Datei, die Sie eigentlich erwarten, dort zu sein.
InformationsquelleAutor der Antwort Jörg W Mittag
Als andere Antworten weisen darauf hin, es ist ein Sicherheitsrisiko, weil
.
in Ihrem laden Pfad bezieht sich auf das gegenwärtige ArbeitsverzeichnisDir.pwd
nicht das Verzeichnis der aktuellen Datei geladen werden. Wer also ausgeführt wird, kann Ihr Skript ändern Sie dieses einfach durchcd
ing in ein anderes Verzeichnis. Nicht gut!Habe ich mit vollständigen Pfaden konstruiert aus
__FILE__
als alternative.Im Gegensatz zu
require_relative
das ist rückwärts kompatibel mit Ruby 1.8.7.InformationsquelleAutor der Antwort Jonathan Tran
Verwenden
require_relative 'file_to_require'
Werfen Sie diese in Ihren code, um require_relative Arbeit in 1.8.7:
InformationsquelleAutor der Antwort Tyler Brock
'.' im Pfad wurde lange Zeit als eine schlechte Sache in der Unix-Welt (siehe, zum Beispiel, http://www.faqs.org/faqs/unix-faq/faq/part2/section-13.html). Ich nehme an, die Ruby-Leute wurden überzeugt von der Weisheit, dies nicht zu tun.
InformationsquelleAutor der Antwort Rodger
Ich fand, dass dies ein confounding ändern, bis ich merkte, ein paar Dinge.
Können Sie festlegen, RUBYLIB in Ihr .Profil (Unix) und gehen mit dem Leben, wie du vor hast:
export RUBYLIB="."
Aber wie oben schon erwähnt, es gilt seit langem als unsicher, dies zu tun.
Für die überwiegende Mehrheit der Fälle können Sie vermeiden Probleme, indem Sie einfach den Aufruf des Ruby-Skripts mit einem vorangestellten '.', z.B. ./scripts/server.
InformationsquelleAutor der Antwort Dylan
Als Jörg W Mittag darauf hingewiesen, ich denke, das, was Sie wollen zu verwenden, ist
require_relative
also die Datei, die Sie benötigen, ist relativ zu der Quell-Datei derrequire
Erklärung und nicht das aktuelle dir.Ihre Abhängigkeiten in Bezug auf Ihre rake build-Datei.
InformationsquelleAutor der Antwort marto