путают autoload_paths vs eager_load_paths в рельсах 4

Я прочитал сообщение о rails load_paths, вот ссылка .

Но я все еще смущен различием между eager_load_paths и eager_load_paths :

Я тестировал их во вновь созданном проекте Rails 4. Кажется, что они работают одинаково, что автоматически перезагружается в режиме разработки, но в режиме производства.

Автор связанной статьи здесь. Вот попытка устранить путаницу, уйдя от ответа @ fkreusch.

В Ruby вы должны требовать каждый файл .rb для запуска своего кода. Однако обратите внимание, что в Rails вы никогда не нуждаетесь ни в каких своих моделях, controllerах или других файлах в app/ каталоге. Почему это? Это связано с тем, что app/* Rails app/* находится в autoload_paths . Это означает, что когда вы запускаете приложение rails в разработке (например, через rails console ), все еще не требуется ни одна из моделей и controllerов. Rails использует специальную магическую черту ruby, чтобы на самом деле ждать, пока код не укажет константу, скажем, Book , и только тогда она будет запускаться, require 'book' которую она находит в одном из autoload_paths . Это дает вам более быстрый запуск консоли и сервера в процессе разработки, поскольку при запуске ничего не требуется, только когда код действительно нуждается в этом.

Теперь это поведение хорошо подходит для местного развития, но как насчет производства? Представьте себе, что в вашем производстве ваш сервер выполняет тот же тип магической постоянной загрузки (автозагрузка). На самом деле это не конец света, вы запускаете свой сервер на производстве, и люди начинают просматривать ваши страницы немного медленнее, потому что некоторые файлы должны быть загружены автоматически. Да, это медленнее для тех немногих первоначальных запросов, в то время как сервер «разогревается», но это не так уж плохо. Кроме того, это еще не конец истории.

Если вы работаете с ruby ​​1.9.x (если я правильно помню), тогда автоматически требующие такие файлы не являются streamобезопасными. Поэтому, если вы используете сервер, такой как puma, у вас возникнут проблемы. Даже если вы не используете многопоточный сервер, вам все равно, вероятно, лучше, если ваше приложение будет «проактивно» при запуске. Это означает, что в процессе производства вы хотите, чтобы каждая модель, каждый controller и т. Д. Были полностью необходимы при запуске приложения, и вы не возражаете против более длительного времени запуска. Это называется нетерпеливой нагрузкой. Все rubyовые файлы с нетерпением загружаются, понимаете? Но как вы можете это сделать, если ваше приложение-рельс не имеет одного require запроса? Вот куда eager_load_paths . Независимо от того, что вы вкладываете в них, все файлы во всех каталогах под этими путями потребуются при запуске в процессе производства. Надеюсь, это очистит его.

Важно отметить, что eager_load_paths не активны в среде разработки, поэтому все, что вы им eager_load_paths , не будет немедленно требоваться немедленно в разработке, только в производстве.

Также важно отметить, что просто поместить что-то в autoload_paths не сделает его загруженным в производство. К сожалению. Вы должны явно включить его в eager_load_paths .

Еще одна интересная особенность заключается в том, что в каждом приложении rails все каталоги в app/ автоматически eager_load_paths как в eager_load_paths , так и в eager_load_paths , что означает, что добавление каталога там не требует дальнейших действий.

В принципе, autoload_paths – это пути, которые Rails будет использовать для автоматического загрузки ваших classов. Например, когда вы вызываете Book , если этот class еще не загружен, он будет проходить через autoload_paths и искать его в этих путях.

В производстве лучше было бы загружать их заранее, чтобы избежать одновременных проблем с автозагрузкой. Для этого он предоставляет eager_load_paths . Пути в этом списке потребуются заранее, когда ваше приложение запустится.

  • Rails: вызов другого действия controllerа с controllerа
  • rails server bin / rails: 6: предупреждение: уже инициализированная постоянная ошибка APP_PATH
  • Создание отношений много-много в Rails
  • rails от многих до многих
  • Поймать все исключения в controllerе рельсов
  • Rails 4 link_to Destroy не работает в учебном руководстве по началу работы
  • Как программно перечислить все controllerы в Rails
  • Ruby on Rails form_ для выбора поля с classом
  • net :: ERR_INCOMPLETE_CHUNKED_ENCODING только в Chrome
  • Доступ к current_user в модели
  • Разница между -%> и%> в рельсах
  • Interesting Posts

    Кто предоставляет интернет-услуги интернет-провайдерам (ISP)?

    Почему java.util.Optional не является Serializable, как сериализовать объект с такими полями

    Mini DisplayPort -> DVI -> VGA?

    Получить общий метод без использования GetMethods

    Как платформа Java независима, когда ей нужна JVM?

    Создание пользовательского JButton из изображений, содержащих прозрачные пиксели

    Thread.Sleep () без замораживания пользовательского интерфейса

    Зачем использовать «virtual» для свойств classа в определениях модели Entity Framework?

    facebook: постоянный токен доступа к странице?

    C ++ 11 move constructor не вызывается, предпочитаемый конструктор по умолчанию

    Установка USB-устройства в Linux

    ошибка компоновщика при связывании учебника будильника буфера (неопределенные ссылки)

    Исправление проблемы библиотеки на E71

    В чем разница между gcc и g ++ / gcc-c ++?

    Я хочу контролировать и ограничивать передачу данных OS X, пока я подключаюсь через свой iPhone

    Давайте будем гением компьютера.