Rails Caches_action пропускают до_filters
-
11-12-2019 - |
Вопрос
У меня есть контроллер, в котором я кэширую действие шоу. А действие Show имеет ряд перед фильтрами для обеспечения безопасности, которые предназначены для выполнения и перенаправления, если пользователь не вошел в систему, а не член текущей группы и т. Д. Эти перед фильтрами работают отлично, когда я не включался к кешированию, но Когда я переворачиваю переключатель, чтобы повернуть кэширование на то, прежде чем фильтры, больше не выполняются (мои звонки отладчика не попадают).
Это всегда было мое понимание того, что до того, как фильтры призваны к кэшированным действиям, это является основным отличием между кэшированием страницы и кэшированием действий. Это резервное копирование рельсы кэшированной кэшированной кэшированной кэшировании.
Действие кэширования работает как кэширование страницы, за исключением того, что входящий веб-запрос выходит из веб-сервера на стек и пакет Rails и пакет действий, чтобы до того, как до него можно запускать фильтры, прежде чем кэш будет подан. Это позволяет запускать аутентификацию и другое ограничение, когда все еще служив результат вывода из кэшированной копии.
Так почему же не мой до того, как вызов фильтров?
немного о моей установке: Rails 3.1 Использование разработки для аутентификации. Я использую Dalli Gem для магазина MEMCACHED.
Вот какой-то код, который суммирует мой код (много CRUFT вырезается):
.class GroupsController < ApplicationController caches_action :show cache_sweeper :group_sweeper before_filter :authenticate_user!, :except => [:index] before_filter :init_group, :except => [:new, :create, :index] before_filter :requires_group_membership, :except => [:new, :create, :index] def show end private def requires_group_membership if current_user and !@group.users_active.index(current_user).nil? return true else redirect_to :root return false end end def init_group @group = current_user.active_groups.find_by_id(params[:id]) if @group.nil? redirect_to :root return false end end
Так, кто-нибудь видел это поведение раньше? У меня есть дыра в понимании того, как до того, как до фильтры и кэширования действий должны работать? Или, возможно, у меня есть странный вауду, происходящие со странной комбинацией версий GEM?
[править]
Интересно, что я только что узнал, что возвращаемая стоимость не оказывает влияния на то, проводится ли методы дальнейшего вдоль цепочки, именно называются ли перенаправления или рендеры.
[править 2]
Я обновил свое приложение к Rails 3.2.3, чтобы посмотреть, был ли он эффект, но не решил проблему. То, что я обнаружил, что то, прежде чем фильтры, определенные в ApplicationController, вызываются, но те, которые в моем GroupScontroller нет.
Решение
Ну это был очень временной способ изучения нового тидбита о кэшировании.
Оказывается, что вам нужно сделать звонок для caches_action
Благодаря Pan Thomakos для его ответ , который содержал этот драгоценный камень информации - который либо не в документах Ruby, либо я не обеснулся над ним.Я представляю эту информацию, добавленную в документы, как только мне удалось кого-то, погибшее время, потерянное из-за этой маленькой слепой пятна.