有两篇博客文章和一篇关于Rails如何创建应用程序的rails,但都没有解释Rails如何查找和设置其自己的根目录。
http://climber2002.github.io/blog/2014/08/24/digging-rails-how-rails-initializes-itself/
http://railscasts.com/episodes/299-rails-initialization-walkthrough?view=asciicast
他们所做的解释主要是如何通过inherited
钩子设置应用程序的类,然后如何通过#initialize
方法通过委派将其实例化。
但是,令我遗憾的是,他们很大程度上忽略了Rails如何查找并设置其根目录,以便实例化该应用程序:/Engine
和/Configuration
-类。
例如,在第一篇博客文章中,Rails.application.root
已经存在:
Rails::Server.new.tap do |server|
require APP_PATH
Dir.chdir(Rails.application.root)
server.start
Rails在哪里以及如何设置其根目录?
答案 0 :(得分:0)
Rails.application
委托root
为其配置对象,该配置对象是Rails::Configuration
的实例。该类是Rails::Engine::Configuration
的子类。并将根目录作为初始化strmtmtn传入。
您可以在source code here中看到定义了Rails.application.config的方法以及确定应用程序根目录的方法:
def config #:nodoc:
@config ||= Application::Configuration.new(self.class.find_root(self.class.called_from))
end
#find_root
方法使用另一种方法#find_root_with_flag
向上遍历目录路径,直到找到包含config.ru
的文件夹。