Hinzufügen eines Verzeichnisses zu $ LOAD_PATH (Ruby)
Habe ich gesehen, die beiden häufigsten verwendeten Techniken für das hinzufügen das Verzeichnis, das die Datei gerade ausgeführt wird $LOAD_PATH (oder $:). Ich sehe die Vorteile, dies zu tun, wenn Sie nicht arbeiten mit einem gem. Man scheint Ausführlicher als die anderen, das ist klar, aber gibt es einen Grund, zu gehen, mit den einen über den anderen?
Den ersten, ausführlichen Methode (overkill):
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
und mehr, einfach, schnell-und-dreckig:
$:.unshift File.dirname(__FILE__)
Grund zu gehen, mit den einen über den anderen?
InformationsquelleAutor der Frage Mark W | 2009-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde sagen, gehen Sie mit
$:.unshift File.dirname(__FILE__)
über das andere, einfach, weil ich gesehen habe, viel mehr Gebrauch von es im code als die$LOAD_PATH
ein, und es ist kürzer zu!InformationsquelleAutor der Antwort Ryan Bigg
Ruby, load path-ist sehr Häufig geschrieben als $: , aber nur weil es kurz ist, macht es nicht besser. Wenn Sie lieber Klarheit, Klugheit, oder, wenn die Kürze um Ihrer selbst Willen macht Sie juckende, brauchen Sie nicht es tun, nur weil alle anderen ist.
Hallo sagen ...
... und verabschieden uns ...
InformationsquelleAutor der Antwort
Ich bin nicht allzu gern auf den "quick-and-dirty" Weg.
Jeder neue Ruby wird nachdenklich werden, was
$:.
ist.Finde ich das offensichtliche.
Oder wenn ich mich Sorge darüber, dass der vollständige Pfad...
UPDATE 2009/09/10
Wie der spät habe ich die folgenden:
Ich habe gesehen, dass es in einer ganzen Reihe von verschiedenen ruby-Projekte beim surfen auf GitHub.
Scheint die Konvention?
InformationsquelleAutor der Antwort Luke Antins
Wenn Sie
script/console
in Ihrem Rails-Projekt und geben Sie$:
erhalten Sie ein array, enthält alle Verzeichnisse, die benötigt wird zum laden von Ruby. Take-away aus dieser kleinen übung ist, dass$:
ist ein array. Dass dem so ist, können Sie die Funktionen ausführen, die auf ihm wie vor anderen Verzeichnissen, dieunshift
- Methode oder die<<
Betreiber. Wie du implizit in deiner Aussage$:
und$LOAD_PATH
sind die gleichen.Den Nachteil mit tut es der schnelle und schmutzige Art und Weise, wie Sie erwähnt haben, ist diese: wenn bereits das Verzeichnis, in Ihr boot Weg ist, wird es sich wiederholen.
Beispiel:
Ich habe ein plugin, das ich erstellt namens todo. Mein Verzeichnis ist aufgebaut wie so:
In der init.rb-Datei habe ich Folgendes eingetragen-code:
Hinweis, wie ich den code-block, um die Aktionen auszuführen, die innerhalb des Blocks an die Saiten 'Modelle', 'Controller' und 'Modelle', wo-ich wiederhole - "models". (FYI,
%w{ ... }
ist nur ein weiterer Weg, zu sagen, Ruby zu halten, ein array von strings). Wenn ichscript/console
ich geben Sie den folgenden:Und ich dieses Typs, so dass es leichter zu Lesen ist und der Inhalt in den string. Die Ausgabe die ich bekomme, ist:
Wie Sie sehen können, obwohl dies als einfaches Beispiel könnte ich erstellen, während mit einem Projekt an dem ich arbeite aktuell an, wenn du nicht aufpasst, die quick-and-dirty Weg, der dazu führen wird wiederholt Pfade. Der längere Weg zu überprüfen, wiederholte Pfade und stellen Sie sicher, dass Sie nicht auftreten.
Wenn Sie ein erfahrener Rails-Programmierer sind, haben Sie wahrscheinlich eine sehr gute Idee von dem, was Sie tun, und wahrscheinlich nicht den Fehler machen, sich wiederholenden Pfade. Wenn Sie ein Neuling sind, dann würde ich mit dem längeren Weg, bis Sie wirklich verstehen, was du tust.
InformationsquelleAutor der Antwort Dyba
Besten, die ich über gekommen sind für das hinzufügen einer dir über relative Pfad bei der Verwendung von Rspec. Ich finde es ausführlich genug, aber auch noch ein schöner one-liner.
InformationsquelleAutor der Antwort Dave Robertson
Es ist ein Juwel, das wird lassen Sie Ihre setup load Pfad mit schöner und sauberer code. Check this out: https://github.com/nayyara-samuel/load-path.
Es hat auch eine gute Dokumentation
InformationsquelleAutor der Antwort Rubyist