0

我正在写一个对象来缓存使用

class Foo
  attr_accessor  :bar
end

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

Rails.write "key", foo

当我打电话

Rails.read "key"

在同一个请求中 - 检索对象。但是,当我在其他请求/其他 rails 进程中调用它时,我得到了 nil。

存储简单对象(数字、字符串、数字数组等)

Rails.cache 数据:

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"]>,
4

1 回答 1

1

谜底的解决方案——在开发环境中,cache_classes 默认为 false。这一事实阻止了 Rails 缓存编组转储的对象,因为它不知道类/模块。

可能的绕过是为了避免开发环境中的低级缓存。

于 2012-05-16T16:37:15.053 回答