bug with mem_cache and marshaling

ara.t.howard
2009-01-25T20:44:21Z

i''m seeing issues with how caching interacts with auto const loading
in production.  it''s find if the objects cached are top-level
themselves, but an object graph (model + associations) is cached i''ll
get errors when a production process first comes up (no models loaded)
and hits the cache to get said object graph.

this fix, which is a uber hack, shows quite clearly the bug - i''m
*really* curious if anyone else has seen this behaviour

the hack:

vendor/rails/activesupport/lib/active_support/cache/mem_cache_store.rb


  24       def read(key, options = nil)
  25         super
  26         @data.get(key, raw?(options))
  27       rescue MemCache::MemCacheError => e
  28         logger.error("MemCacheError (#{e}): #{e.message}")
  29         nil
  30       rescue ArgumentError => e
  31         message = e.message
  32         raise unless message =~ %r|undefined class/module|
  33         class_name = message.scan(%r/\w+/).last
  34         begin
  35           ActiveSupport::Dependencies.load_missing_constant
ActiveRecord::Base, class_name
  36         rescue Object
  37           raise e
  38         end
  39       end


in case it isn''t obvious this simply shows that rails const loading
mechanism is not triggered from a Marshal.load, which makese sense
actually....

thoughts?

a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama