объяснение файла application.rb в приложении Rails - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь глубже понять, как инициализируется приложение rails.Я просматриваю файл config / application.rb и меня смущают эти три строки:

require_relative 'boot'

require 'rails/all'

Bundler.require(*Rails.groups)

Из того, что я могу сказать, все три из этих строк загружаютдрагоценные камни, используемые приложением Rails. boot.rb , кажется, загружает все гемы, как это делает Bundler.require (* Rails.groups) .Почему необходимо иметь все три строки кода?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

В основном правильно, и вы можете проверить, что «нужно», отключив одну строку за раз в рабочем приложении Rails.

  • require_relative 'boot': приложение все еще работает.
  • require 'rails/all': метод не найден, ошибка для драгоценного камня, не указанного в моем Gemfile (одна из встроенных в Rails (требуется 'rails / all')
  • Bundler.require(*Rails.groups): методне найден для gem из Gemfile.

Итак, второе и третье являются независимыми и необходимыми. Вызов boot.rb для bundler / setup не может заменить ни одного из двух другихпотому что его функция на самом деле очистить путь загрузки , убедившись, что включены только гемы Gemfile, а все остальное удалено. См. последнюю строку источника установки Bundler ., пока приложение работает, оно может работать с доступом к другим гемам, которые вы не собирались включать, и дает ложное представление о том, что приложение работает, когда может произойти сбой для другого пользователя, который установил только зависимости Gemfile..

ИтакВы можете избежать неприятностей только со вторым и третьим в краткосрочной перспективе, но определенно захотите, чтобы все три на чем-то, что кто-то может когда-нибудь выполнить.Накладные расходы минимальны, поэтому я бы не стал их удалять.

0 голосов
/ 25 февраля 2019
require_relative 'boot'

Устанавливает Bundler и пути загрузки для драгоценных камней

require 'rails/all'

Это загружает камни рельсов.Его можно заменить, чтобы явно требовать только те камни рельсов, которые вам нужны (например, require "action_mailer/railtie "

Bundler.require(*Rails.groups)

Для этого требуются камни, перечисленные в вашем Gemfile по умолчанию. Если вы удалите эту строку, у вас будеттребовать каждый драгоценный камень вручную.

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