我正在尝试使用操作缓存来缓存操作,然后使用另一个名为refresh的操作手动使其过期。我知道Rails的最佳实践是使用扫地机,但这也不起作用。这在WebBrick本地工作得很好但是当我使用Phusion Passenger部署到Apache时,我无法使缓存过期。似乎expire_action通过从缓存路径中省略索引来使错误的操作到期。
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.log 会显示:
Started GET "/bills"
Rendered bills/index.html.erb
Write fragment views/www.mysite.org/bills/index
然后当我导航到http://www.mysite.org/refresh时, /log/production.log 会显示:
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
请注意,Expire片段视图/ 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>
答案 0 :(得分:0)
我认为这个问题是因为我在控制器中使用继承而在我的基类中有一些caches_action指令。子控制器中的caches_action覆盖并没有像我预期的那样覆盖(并且与WebBrick不一致)。我只是删除了我的基类中的caches_action指令,这解决了我的问题。