Ruby如何知道在哪里可以找到所需的文件?

这是一个新手问题:

require 'tasks/rails' 

我在每个rails项目的根路径中看到了Rakefile中的这一行。 我想这行是用来要求vendor / rails / railties / lib / tasks / rails.rb来加载所有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 } 

我的问题是为什么只为require方法指定’tasks / rails’,而不是文件的完整路径?

提前致谢。

当你启动rails应用程序时,它运行config / boot.rb,它调用Rails::Initializer.set_load_path并设置$LOAD_PATH

Ruby使用该目录列表来查找require行上指定的文件。 如果你给它一个绝对路径,如require '/home/lolindrath/ruby/lib.rb' ,它将跳过该搜索。

这大致类似于C / C ++中的#include ,它会搜索您为编译器找到该头文件的include路径。

我相信因为您的路径是在/config/environment.rb文件中设置的:

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

当然。 在/config/boot.rb(在environment.rb中调用)中,RAILS_ROOT设置如下:

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

这让你可以从根本上要求我相信的东西。 希望无论如何都是答案!