2014-11-09 4 views
0

Мой application.html.slim шаблон выглядит следующим образом концептуально:Очистка кэша макета в приложении Rails

/ some stuff 
= header() 
/more stuff 
= yield 
/more stuff 
= footer() 

Теперь header() и footer() загружаются из внешнего источника, и они зависят от языка.

Я внедрил механизм изменения языка (на основе URL-адреса), поэтому header и footer будут загружены из другого источника сразу после изменения языка.

Моя проблема:

  • Я запустить сервер
  • загружает http://myserver.dev/en
  • Содержания, а также заголовок показаны на английском -> OK
  • загружает http://myserver.dev/de
  • Теперь заголовок все еще находится на английском языке, пока контент находится на немецком языке ->Не в порядке
  • Теперь заголовок и нижний колонтитул не изменятся, пока я снова не перезапущу сервер.

Так как я могу очистить кэш макета, так что footer и header повторно загружены.

Я попробовал следующее (но безрезультатно):

  • Ручное удаление файлов кэша с диска (они до сих пор, кажется, в памяти)
  • Добавление следующие настройки в мой application.rb

    config.action_view.cache_template_loading = false 
    config.action_controller.perform_caching = false 
    
  • Вызов Rails.cache.clear в каждый запрос
  • Попытка истекает отдельные частичный: expire_fragment('external/_header.html.slim') или expire_fragment(%r{external})

ответ

0

Я исправил проблему благодаря @ gabrimac переживайте:

Так что, когда я определяю специальный ключ кэша в представлении, как так:

- cache("language_dependant_partial") do 
    = ApplicationHelper::footer() 

, то я могу аннулировать кэш с помощью этого конкретного идентификатора:

before_filter :clear_cache 

def clear_cache 

    # TODO: This currently clear's the cache on every request 
    expire_fragment('language_dependant_partial') 
end 
1

Я избегал этой ситуации с помощью кэша фрагментов и создания кэша блоков для каждого языка.

В воззрениях определить блок, который вы будете изменять язык с:

<% cache("block_1_#{I18n.locale}") do %> 
    ... 
<% end %> 
+0

В чем смысл кеширования, когда он истекает для измененного языка (каждый запрос)?Если «change_language» не умный и не знает как пользовательский, так и предыдущий язык. – blelump

+0

Вы правы, не имеет смысла в этой ситуации – gabrimac

+0

Спасибо @gabrimac Я смог исправить проблему сейчас: http://stackoverflow.com/a/26833602/784318 – Besi

Смежные вопросы