ここで説明されているように、Rails の新しいキャッシュ ソリューションを使用しています。
開発環境は正常に動作しますが、テストと本番では無効なETag
ヘッダーが送信され、stale?
関数のパラメーターが無視されます。
これが私のコントローラーの1つの対応する部分です:
def index
@categories = Category.all
if stale?(:etag => @categories)
respond_to do |format|
format.html
format.xml { render :xml => @categories }
format.json { render :json => @categories }
end
end
end
のstale?
メソッドは、次のコードを持つオブジェクトのを設定するメソッドをActionController::Base
呼び出します。fresh_when
etag
Response
def etag=(etag)
if etag.blank?
headers.delete('ETag')
else
headers['ETag'] = %("#{Digest::MD5.hexdigest(ActiveSupport::Cache.expand_cache_key(etag))}")
end
end
すべての環境で取得した場合、Category
モデルは正しいものを送信します。cache_key
>> Category.find(1).cache_key
=> "categories/1-20100117153353"
>> ActiveSupport::Cache.expand_cache_key(Category.find(:all))
=> "categories/1-20100117153353/categories/2-20100117152007/categories/3-20100116094423/categories/4-20100116094423/categories/5-20100116094423/categories/6-20100116094423/categories/7-20100116094423/categories/8-20100117145800/categories/9-20100117145808"
開発環境でURLを選択すると、保存するたびに変更されますが、テストまたは本番環境では変更されないため、何が起こってhttp://localhost:3000/admin/categories/
いるのかわかりません。ETag
Category
webrickとthinでテストしました