CachedSupermodel 0.1.2.10 → 0.1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.txt +66 -3
  2. data/Rakefile +1 -1
  3. data/lib/cs_active_record.rb +5 -1
  4. metadata +3 -3
data/README.txt CHANGED
@@ -39,15 +39,78 @@ Then, when run, that query will be cached.
39
39
 
40
40
  == SYNOPSYS:
41
41
 
42
- FIX (code sample of usage)
42
+ To completely remove most of your SQL read queries, this is what you write (basically) in your environment.rb.
43
+
44
+ I use the caffeine gem here to get as speedy access to the memcache servers as possible, just 'gem install caffeine' for that.
45
+
46
+ Also, you need to install the memcache_client gem ('gem install memcache_client') because otherwise rails will assume (stupid
47
+ as it is) that you can't use memcache for sessions.
48
+
49
+ -------------------8<--------------------
50
+
51
+ # require the necessary gems
52
+ require 'caffeine'
53
+ require 'adocca_memcache'
54
+ require 'cached_supermodel'
55
+
56
+ # Set the base time to live to "forever"
57
+ ActiveRecord::Base.ttl = 0
58
+
59
+ # default memcache options
60
+ # including a separate namespace for each environment (dev, prod, test).
61
+ # (if you want to run several apps on the same memcache servers i suggest also adding the app name to the namespace...)
62
+ memcache_options = {
63
+ :c_threshold => 10_000,
64
+ :compression => false,
65
+ :debug => false,
66
+ :namespace => "#{RAILS_ENV}",
67
+ :readonly => false,
68
+ :urlencode => false
69
+ }
70
+
71
+ # The default CACHE object used by pretty much everything
72
+ CACHE = Caffeine::MemCache.new memcache_options
73
+ # Let our magical synchronization lock know about this cache
74
+ Adocca::Synchronized::CACHE = CACHE
75
+ # set the cache servers to localhost (please, dont forget to actually run a memcache server wherever you set this to :)
76
+ CACHE.servers = ['localhost:11211']
77
+
78
+ #
79
+ # Let the sessions be stored in a separate memcached instance
80
+ # This way we can easily flush the cache for the application-servers
81
+ # without destroying the sessions.
82
+ #
83
+ CACHE_SESSION = Caffeine::MemCache.new memcache_options
84
+ CACHE_SESSION.servers = ['localhost:11211']
85
+
86
+ # User is considered offline after N mins
87
+ $SESSION_TIMEOUT = 12.hours
88
+
89
+ # create a nicely reachable constant for the session options
90
+ DEFAULT_SESSION_OPTIONS = ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS
91
+ DEFAULT_SESSION_OPTIONS.delete(:session_expires)
92
+ # use the session memcache for sessions unless we are doing this in the test environment,
93
+ # in which case i experienced some problems with this...
94
+ DEFAULT_SESSION_OPTIONS.update({
95
+ :database_manager => CGI::Session::MemCacheStore,
96
+ :cache => CACHE_SESSION,
97
+ :expires => $SESSION_TIMEOUT
98
+ }) unless RAILS_ENV == 'test'
99
+
100
+ --------------------8<-------------------------
43
101
 
44
102
  == REQUIREMENTS:
45
103
 
46
- * FIX (list of requirements)
104
+ * AdoccaMemcache
47
105
 
48
106
  == INSTALL:
49
107
 
50
- * FIX (sudo gem install, anything else)
108
+ sudo gem install CachedSupermodel
109
+ sudo gem install memcache_client
110
+
111
+ (recommended)
112
+
113
+ sudo gem install caffeine
51
114
 
52
115
  == LICENSE:
53
116
 
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'rubygems'
4
4
  require 'hoe'
5
5
  require './lib/cached_supermodel.rb'
6
6
 
7
- Hoe.new('CachedSupermodel', '0.1.2.10') do |p|
7
+ Hoe.new('CachedSupermodel', '0.1.2.11') do |p|
8
8
  p.summary = 'A library that automatically caches all ActiveRecord::Base instances in memcache using the AdoccaMemcache gem.'
9
9
  p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
10
10
  p.author = 'adocca Entertainment AB'
@@ -360,9 +360,13 @@ before_destroy :invalidate_cached_#{finder}
360
360
 
361
361
  ##
362
362
  # The local cache key for this record.
363
+ # If this class is STI, store the record as the top-level class instead.
364
+ # Otherwise we will have uncached queries when STI-records are stored as polymorphic assocations
365
+
363
366
 
364
367
  def self.cache_key_local(klass, id)
365
- return "#{klass}:#{id}"
368
+ klass = Module.const_get(klass) unless Class === klass
369
+ return "#{klass.base_class.name}:#{id}"
366
370
  end
367
371
 
368
372
  def cache_key_local
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: CachedSupermodel
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.2.10
7
- date: 2007-10-17 00:00:00 +02:00
6
+ version: 0.1.2.11
7
+ date: 2008-01-22 00:00:00 +01:00
8
8
  summary: A library that automatically caches all ActiveRecord::Base instances in memcache using the AdoccaMemcache gem.
9
9
  require_paths:
10
10
  - lib
@@ -70,5 +70,5 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 1.3.0
73
+ version: 1.4.0
74
74
  version: