expire_action не работает при развертывании в Apache

#ruby-on-rails-3 #apache

#ruby-on-rails-3 #apache

Вопрос:

Я пытаюсь использовать кэширование действий для кэширования действия, а затем вручную завершить его с помощью другого действия под названием обновить. Я знаю, что в Rails лучше всего использовать очиститель, но это тоже не работает. Это отлично работает локально с WebBrick, но при развертывании в Apache с использованием Phusion Passenger я не могу получить срок действия кэша. Похоже, что expire_action завершает неправильное действие, пропуская index из пути к кэшу.

bills_controller.rb

 class BillsController < ApplicationController
  caches_action :index

def index
 ...
end

def refresh
  expire_action :action => :index
  redirect_to :action => :index
end
  

Когда я перехожу к http://www.mysite.org/bills, /log/production.журнал показывает это:

 Started GET "/bills"
Rendered bills/index.html.erb
Write fragment views/www.mysite.org/bills/index
  

Затем, когда я перейду к http://www.mysite.org/refresh, /log/production.журнал показывает это:

 Started GET "/bills/refresh" 
Expire fragment views/www.mysite.org/bills   <<<<Culprit?
Redirected to http://www.mysite.org/bills
Started GET "/bills"
Read fragment views/www.mysite.org/bills/index
  

Обратите внимание, что просмотр фрагмента с истекшим сроком действия/www.mysite.org/bills не включает в себя часть /index. Я подозреваю, что именно по этой причине срок действия кэша не истекает, но я не уверен.

Моя конфигурация apache для сайта выглядит следующим образом:

 <VirtualHost *:80>
      ServerName www.mysite.org
      DocumentRoot /var/www/html/mysite.org/public
      <Directory /var/www/html/mysite.org/public>
         AllowOverride all
         Options -MultiViews
      </Directory>
</VirtualHost>
  

Ответ №1:

Я думаю, что эта проблема была вызвана тем, что я использовал наследование для своих контроллеров и имел некоторые директивы caches_action в моем базовом классе. Переопределения caches_action в дочерних контроллерах переопределялись не так, как я ожидал (и несовместимо с WebBrick). Я просто удалил директивы caches_action в своих базовых классах, и это устранило мою проблему.