这是另外一个新手问题:
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',而不是文件的完整路径?
提前致谢。
答案 0 :(得分:13)
启动rails应用程序时,会运行config / boot.rb,调用Rails::Initializer.set_load_path
并设置$LOAD_PATH
。
Ruby使用该目录列表来查找require
行上指定的文件。如果你给它一个绝对路径,如require '/home/lolindrath/ruby/lib.rb'
,它将跳过该搜索。
这大致类似于C / C ++中的#include <stdlib.h>
,它会搜索您为编译器找到该头文件的包含路径。
答案 1 :(得分:1)
我相信因为您的路径是在/config/environment.rb文件中设置的:
require File.join(File.dirname(__FILE__), 'boot')
答案 2 :(得分:0)
不确定。在/config/boot.rb(在environment.rb中调用)中,RAILS_ROOT设置如下:
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
这允许你从我认为的根源要求。希望无论如何都是答案!