Как Rails устанавливает корневой каталог во время инициализации? - PullRequest
0 голосов
/ 12 сентября 2018

Есть два сообщения в блоге и разделы, посвященные тому, как Rails создает приложение, но ни одно из них не объясняет, как Rails находит и устанавливает свой собственный корневой каталог.

Что они действительно объясняют, так это то, как, в основном через inherited хук, задается класс приложения и как он затем создается посредством делегирования#initialize -метод.

Однако, к большому сожалению, они в основном пропускают то, как Rails находит и устанавливает свой корневой каталог, который мне нужен для создания экземпляра приложения: /Engine и /Configuration-classes.

Например, в первом сообщении в блоге уже есть Rails.application.root:

    Rails::Server.new.tap do |server|
    require APP_PATH
    Dir.chdir(Rails.application.root)
    server.start

Где и как Rails устанавливает свой корневой каталог?

1 Ответ

0 голосов
/ 12 сентября 2018

Rails.application делегирует root своему объекту конфигурации, который является экземпляром Rails::Configuration.Этот класс является подклассом Rails::Engine::Configuration.и корневой каталог передается в качестве инициализации arguemtn.

Вы можете увидеть определение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...