0

I am writing an object to cache using

class Foo
  attr_accessor  :bar
end

foo = Foo.new
foo.bar = "123"

Rails.write "key", foo

When I call

Rails.read "key"

in the same request - the object is retrieved. However when I call it on an other request / other rails process I get nil.

Storing simple objects works (numbers, strings, array of numbers etc.)

Rails.cache data:

pry(main)> Rails.cache
=> #<ActiveSupport::Cache::DalliStore:0x007fa42906d5b8
 @data=
  #<Dalli::Client:0x007fa42906d478
   @options={:expires_in=>0},
   @ring=
    #<Dalli::Ring:0x007fa423bc0ad8
     @continuum=nil,
     @failover=true,
     @servers=
      [#<Dalli::Server:0x007fa423bc0c90
        @down_at=nil,
        @error=nil,
        @fail_count=0,
        @hostname="localhost",
        @last_down_at=nil,
        @lock=
         #<Monitor:0x007fa423bc0970
          @mon_count=0,
          @mon_mutex=#<Mutex:0x007fa423bc0858>,
          @mon_owner=nil>,
        @msg=nil,
        @options=
         {:down_retry_delay=>1,
          :socket_timeout=>0.5,
          :socket_max_failures=>2,
          :socket_failure_delay=>0.01,
          :value_max_bytes=>1048576,
          :username=>nil,
          :password=>nil,
          :async=>false,
          :expires_in=>0},
        @port=11211,
        @sock=#<Dalli::Server::KSocket:fd 11>,
        @version="1.4.13",
        @weight=1>]>,
   @servers=["localhost:11211"]>,
Tor
  • 595
  • 2
  • 10

1 Answers1

1

Well the solution to the mystery- In development env cache_classes is default to false. This fact prevents rails cache from marshaling the dumped objects since it doesn't know the class/module.

Possible bypass is to avoid low level caching in development env.

Tor
  • 595
  • 2
  • 10
  • Or turn caching on in development. I did a +1 because I was about to make the same mistake :-) – pedz Jun 14 '12 at 13:09