Предотвратить Rails 2/3 от кеширования Lib / Classes - PullRequest
9 голосов
/ 06 августа 2010

Кто-нибудь знает, как поручить рельсам НЕ кэшировать классы, которые включены в папку lib?

Ответы [ 2 ]

9 голосов
/ 06 августа 2010

Под "кэшированием классов" я предполагаю, что вы имеете в виду, что исходные файлы в каталоге приложения автоматически перезагружаются в среде разработки перед обработкой нового запроса?

Это не связано с кэшированием, обычное поведение Ruby - читать и анализировать исходный файл один раз и никогда больше, пока выполняется процесс. Rails (на самом деле ActiveSupport :: Dependencies) предоставляет механизм для перезагрузки всего кода перед обработкой запроса. В среде разработки это полезно, поскольку вы не хотите перезапускать локальный веб-сервер для каждого изменения, которое вы вносите в код. В производственной среде это сильно ухудшит производительность и поэтому будет отключено.

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

class MyClass
  unloadable # mark this class as reloadable before a request is processed

  # …
end

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

1 голос
/ 15 августа 2012

Это также можно сделать, не используя каталог lib/, а вместо этого, сохранив любые классы или вспомогательные файлы в каталоге app/helpers.Таким образом, они будут перезагружены во время разработки и кэшированы во время производства.

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