1

Heroku で RoR アプリを実行しています。私のコントローラーでは、次のような単純な caches_action ステートメントを実行しています。

caches_action :index, :expires_in => 5.minutes

def index 
    @articles = Article.main.paginate(:page => params[:page], :per_page => 10)
    ....
end

Article モデルでは、次のようなスコープ ステートメントを使用して、公開日に基づいてアイテムが取得されます。

scope :before, lambda{|timenow| {:conditions => ["time <= ?", timenow]}}
scope :published, where(:published => true).order("time DESC")
scope :main, before(Time.now).published

私は caches_action を 5 分に設定していますが、今日の記事がリストの一番上に表示されるようにするには、手動でキャッシュをクリアする必要があります。Heroku または Rails にグローバル キャッシュ設定はありますか?

より詳しい情報:

今日、新しい記事が表示されなかったときに、コンソールに入って次のように入力してみました。

Rails.cache.clear

これは効果がありませんでした。次に、インデックス コントローラーと同じ ActiveRecord リクエストを使用してみました。

Article.main

...そして、サイトに表示されていないものも含めて、正しい記事が返されました。

サーバーを完全に再起動するだけで、キャッシュがリセットされ、記事が表示されました。

4

1 に答える 1

0

アクションキャッシングを使用するRailsプロジェクトをherokuで作成しました。リクエストを15秒間適切にキャッシュしてから、キャッシュを更新しています。

ダリジェムを使用していない可能性はありますか?

herokuアドオン:

heroku addons:add memcache:5mb

コード:

config / application.rb

config.cache_store = :dalli_store

app / controllers / home_controller.rb

class HomeController < ApplicationController

  caches_action :index, :expires_in => 15.seconds
  def index
    @timestamp = Time.now
  end
end

app / views / home / index.html.erb

<h1>hi!</h1>
I was generated at <%= @timestamp %>.
于 2012-10-17T19:14:00.567 に答える