OSDN Git Service

activities page caching
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Sun, 27 Nov 2011 12:53:12 +0000 (14:53 +0200)
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Sun, 27 Nov 2011 12:53:12 +0000 (14:53 +0200)
app/controllers/projects_controller.rb
app/models/project.rb
config/environments/production.rb

index a11ad08..ee5f731 100644 (file)
@@ -67,7 +67,7 @@ class ProjectsController < ApplicationController
   def show
     return render "projects/empty" unless @project.repo_exists?
     limit = (params[:limit] || 20).to_i
-    @activities = @project.updates(limit)
+    @activities = @project.cached_updates(limit)
   end
 
   #
index 09c91fb..7998979 100644 (file)
@@ -143,6 +143,23 @@ class Project < ActiveRecord::Base
     last_activity.try(:created_at)
   end
 
+  # Get project updates from cache
+  # or calculate. 
+  def cached_updates(limit, expire = 2.minutes)
+    activities_key = "project_#{id}_activities"
+    cached_activities = Rails.cache.read(activities_key)
+    if cached_activities
+      activities = cached_activities
+    else
+      activities = updates(limit)
+      Rails.cache.write(activities_key, activities, :expires_in => 60.seconds)
+    end
+
+    activities
+  end
+
+  # Get 20 events for project like
+  # commits, issues or notes
   def updates(n = 3)
     [
       fresh_commits(n),
index d809481..fc8d4c1 100644 (file)
@@ -37,7 +37,7 @@ Gitlab::Application.configure do
   # config.logger = SyslogLogger.new
 
   # Use a different cache store in production
-  # config.cache_store = :mem_cache_store
+  config.cache_store = :memory_store
 
   # Enable serving of images, stylesheets, and JavaScripts from an asset server
   # config.action_controller.asset_host = "http://assets.example.com"