Можно ли программно очистить кеш макетов и представлений Rails 3? - PullRequest
5 голосов
/ 03 мая 2011

У меня есть CMS на основе Rails 3, которая позволяет пользователям создавать и изменять макеты и представления.Эти макеты и представления являются теми же, что встроены в каркас, и поддерживаются только моделью для некоторых дополнительных возможностей.Проблема, которую я хотел бы решить, состоит в том, что эти файлы шаблонов кэшируются, как только к ним обращаются в открытом доступе, поэтому невозможно увидеть изменения в макетах или представлениях, пока сервер не будет перезапущен.Этого не происходит в режиме разработки, где кэширование отключено, но, очевидно, отключение кэширования шаблонов в рабочей среде не принесет больших результатов для производительности.Очистка memcache, похоже, не помогает.Возможно ли программно очистить кэш макетов и представлений в производственной среде, возможно, с чем-то вроде перезагрузки!как у нас в консоли?Или я застрял при необходимости перезапускать Passenger каждый раз, когда кто-то хочет настроить один из этих макетов или представлений (возможно, используя подход в этой теме: Очистка кеша Rails )?

Обратите внимание, что яЯ не имею в виду очистку страницы и кэшей действий, на которые полагаются общедоступные страницы и которые работают просто отлично.

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

У Хосе Валима есть отличная глава "Создание приложений на Rails", посвященная этой теме. Вот подход , который использует Mongoid для хранения шаблонов представления.Если вы создаете свой собственный вид Resolver, то вам просто нужно вызвать #clear_cache для экземпляра resolver, когда кто-то сохраняет новый шаблон в базе данных.

2 голосов
/ 20 декабря 2012

эта конфигурация может помочь (по крайней мере, она сработала * для меня):

config.action_view.cache_template_loading = false
  • работает в рельсах 3

Существует небольшая разница в рельсах 2:

config.action_view.cache_template_reloading = false
1 голос
/ 03 мая 2011

В рабочем режиме обычно требуется перезапуск для реализации изменений кода рельсов, что вы и делаете, редактируя макеты и представления.Похоже, вы действительно работаете в среде разработки, если вы редактируете код приложения во время его работы.В производственном режиме я не знаю способа обновления Passenger без нажатия restart.txt или перезапуска веб-сервера.

РЕДАКТИРОВАТЬ: вы должны иметь возможность программно касаться tmp / restart.txt из своего приложения.Это должно сказать Пассажиру перезагрузить при следующем запросе.

...