Question

Voici encore une question pour les débutants:

require 'tasks/rails'

J'ai vu cette ligne dans Rakefile à la racine de chaque projet de rails. J'imagine que cette ligne est utilisée pour obliger vendeur / rails / railties / lib / tasks / rails.rb à charger toutes les tâches de rake:

$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 }

Ma question est la suivante: pourquoi ne spécifie-t-on que 'tasks / rails' pour la méthode require, mais pas le chemin complet du fichier?

Merci d'avance.

Était-ce utile?

La solution

Lorsque vous démarrez votre application rails, elle lance config / boot.rb qui appelle Rails::Initializer.set_load_path et voilà le $LOAD_PATH.

Ruby utilise cette liste de répertoires pour rechercher les fichiers spécifiés sur une ligne require. Si vous lui donnez un chemin absolu tel que require '/home/lolindrath/ruby/lib.rb', la recherche sera ignorée.

Ceci est à peu près analogue à #include <stdlib.h> en C / C ++ où il recherche le chemin d'inclusion que vous donnez au compilateur pour trouver ce fichier d'en-tête.

Autres conseils

Je crois que vos chemins sont définis dans votre fichier /config/environment.rb:

require File.join(File.dirname(__FILE__), 'boot')

Bien sûr. Dans /config/boot.rb (appelé dans environment.rb), RAILS_ROOT est configuré comme suit:

RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)

Ce qui vous permet d’exiger des choses de la racine, je crois. J'espère que c'est la réponse quand même!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top