путают 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
  • ActionController :: InvalidAuthenticityToken
  • Переполнение печенья в рельсах?
  • Переадресовывают ли redirect_to и обмениваются?
  • Как реализовать систему достижений в RoR
  • Разница между -%> и%> в рельсах
  • Разница между строкой и текстом в рельсах?
  • Переопределение Rails default_scope
  • Rails select helper - выбранное значение по умолчанию, как?
  • Перенаправить запросы, не связанные с WWW, на www-адреса в Rails
  • rails server bin / rails: 6: предупреждение: уже инициализированная постоянная ошибка APP_PATH
  • Давайте будем гением компьютера.