public
Rubygem
Fork of wycats/merb-core
Description: Merb Core: All you need. None you don't.
Homepage: http://www.merbivore.com
Clone URL: git://github.com/somebee/merb-core.git
Removed dependency on memcache-client 'memcache_util.rb' which was dependent on 
ActiveRecord::Base for logging exceptions.
Now memcache works with both memcache-client gem and memcached gem. It also 
works withouth ActiveRecord.
somebee (author)
Sat Apr 26 08:03:15 -0700 2008
commit  cfda52e392341f17834c5e2bd3779bc506da5d25
tree    ce2822c3e9abedfecb448fa8428b5cc7ed780a5a
parent  b2ffd00832890a37793691854149893eccf0cc31
...
1
2
3
4
...
19
20
21
22
 
 
 
 
 
23
24
25
...
34
35
36
37
 
38
39
40
...
42
43
44
 
 
 
 
 
 
45
46
47
...
75
76
77
78
 
 
 
 
 
79
80
81
...
92
93
94
95
96
97
98
...
 
1
2
3
...
18
19
20
 
21
22
23
24
25
26
27
28
...
37
38
39
 
40
41
42
43
...
45
46
47
48
49
50
51
52
53
54
55
56
...
84
85
86
 
87
88
89
90
91
92
93
94
...
105
106
107
 
108
109
110
0
@@ -1,4 +1,3 @@
0
-require 'memcache_util'
0
 module Merb
0
 
0
   module SessionMixin #:nodoc:
0
@@ -19,7 +18,11 @@ module Merb
0
     # session has changed.
0
     def finalize_session 
0
       if @_fingerprint != Marshal.dump(request.session.data).hash
0
-        ::Cache.put("session:#{request.session.session_id}", request.session.data)
0
+        begin
0
+          CACHE.set("session:#{request.session.session_id}", request.session.data)
0
+        rescue => err
0
+          Merb.logger.debug("MemCache Error: #{err.message}")
0
+        end
0
       end
0
       set_cookie(_session_id_key, request.session.session_id, Time.now + _session_expiry) if (@_new_cookie || request.session.needs_new_cookie)
0
     end
0
@@ -34,7 +37,7 @@ module Merb
0
   ##
0
   # Sessions stored in memcached.
0
   #
0
-  # Requires setup in your +init.rb+:
0
+  # Requires setup in your +init.rb+.
0
   #
0
   #   require 'memcache'
0
   #   CACHE = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
0
@@ -42,6 +45,12 @@ module Merb
0
   # And a setting in +init.rb+:
0
   #
0
   #   c[:session_store] = 'memcache'
0
+  #
0
+  # If you are using the memcached gem instead of memcache-client, you must setup like this:
0
+  #
0
+  #   require 'memcached'
0
+  #   CACHE = Memcached.new('127.0.0.1:11211', { :namespace => 'my_app' })
0
+  #
0
   class MemCacheSession
0
 
0
     attr_accessor :session_id
0
@@ -75,7 +84,11 @@ module Merb
0
       #   sessions matched session_id, a new MemCacheSession will be generated.
0
       def persist(session_id)
0
         unless session_id.blank?
0
-          session = ::Cache.get("session:#{session_id}")
0
+          begin
0
+            session = CACHE.get("session:#{session_id}")
0
+          rescue => err
0
+            Merb.logger.debug("MemCache Error: #{err.message}")
0
+          end
0
           if session.nil?
0
             # Not in memcached, but assume that cookie exists
0
             session = new(session_id)
0
@@ -92,7 +105,6 @@ module Merb
0
           session_object.data = session
0
           [session_object, session_object.session_id]
0
         end
0
-
0
       end
0
 
0
       # Don't try to reload in dev mode.

Comments