这是另外一个新手问题:

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 <stdlib.h>,它会搜索您为编译器找到该头文件的包含路径。

其他提示

我相信因为您的路径是在/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)

这允许你从我认为的根源要求。希望无论如何都是答案!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top