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)
这让你可以从根本上要求我相信的东西。 希望无论如何都是答案!