Wie weiß Rubin, wo eine gewünschte Datei zu finden?
-
03-07-2019 - |
Frage
Hier ist eine weitere newbie Frage:
require 'tasks/rails'
sah ich diese Zeile in Rakefile im Wurzelpfad jedes Schienen-Projekt. Ich denke, diese Linie verwendet wird, Verkäufer / Schienen / railties / lib / Aufgaben / rails.rb zu verlangen, dass alle Rake Aufgaben zu erhalten geladen:
$VERBOSE = nil
# Load Rails rakefile extensions
Dir["#{File.dirname(__FILE__)}/*.rake"].each { |ext| load ext }
# Load any custom rakefile extensions
Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }
Meine Frage ist, warum nur die Aufgaben / Schienen "für die erfordern Verfahren angegeben werden, aber nicht der vollständige Pfad der Datei?
Vielen Dank im Voraus.
Lösung
Wenn Sie Ihre Rails-Anwendung starten Sie es läuft config / boot.rb die Anrufe Rails::Initializer.set_load_path
und thatsets bis die $LOAD_PATH
.
Rubin verwendet diese Liste der Verzeichnisse, die Dateien auf einem require
Zeile angegeben zu finden. Wenn Sie es einen absoluten Pfad wie require '/home/lolindrath/ruby/lib.rb'
geben wird, dass die Suche überspringen.
Das in etwa analog ist in C / C ++ #include <stdlib.h>
wo es der Weg Sie den Compiler enthalten sucht geben, dass die Header-Datei zu finden.
Andere Tipps
Ich glaube, da die Pfade in Ihrer /config/environment.rb Datei eingerichtet sind:
require File.join(File.dirname(__FILE__), 'boot')
Klar. In /config/boot.rb (genannt in environment.rb) die RAILS_ROOT eingerichtet ist wie so:
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
Welche können Sie Dinge von der Wurzel verlangen, glaube ich. Hoffe, das ist die Antwort auf jeden Fall!