2011-11-11 13 views
0

アクションキャッシュを使用してアクションをキャッシュし、次にrefreshという別のアクションを使用して手動で有効期限を切ろうとしています。 Railsのベストプラクティスはスイーパーを使うことだが、それもうまくいきません。これはWebBrickを使ってローカルでうまく動作しますが、Phusion Passengerを使用してApacheにデプロイすると、キャッシュが失効することはありません。 expire_actionは、キャッシュパスからインデックスを省略することで、間違った動作を期限切れにしているようです。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 

Iはhttp://www.mysite.org/billsに移動すると、/log/production.logこれを示しています。私はhttp://www.mysite.org/refreshに移動するとき/ログ、そして

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

を/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

私は私のコントローラの継承を使用していたし、私の基本クラスのいくつかのcaches_actionディレクティブを持っていたので、この問題が発生したと思います。子コントローラのcaches_actionオーバーライドは、私が期待したように(そしてWebBrickと一貫して)オーバーライドしていませんでした。私は単純にベースクラスのcaches_actionディレクティブを削除しました。これが私の問題を解決しました。

関連する問題