#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 в своих базовых классах, и это устранило мою проблему.