Marshal (correctly) won't dump anything with singleton methods.  This
is because things with singleton methods can't be properly "re-
hydrated".  Imagine if you dumped an object to JSON.  If you wanted to
get it back, you could create a new instance of that object, and
assign all the values from the values in your JSON string.  But if you
have a special method that has been defined on an object, there's no
way for Marshal to get that method back.  So that's why it breaks.
Take a look at this over-simplified example in IRB:

irb(main):006:0> Marshal.dump Object.new
=> "\004\bo:\vObject\000"
irb(main):007:0> o = Object.new
=> #<Object:0x10016b4e8>
irb(main):008:0> def o.foo
irb(main):009:1> p "foo"
irb(main):010:1> end
=> nil
irb(main):011:0> Marshal.dump o
TypeError: singleton can't be dumped
        from (irb):11:in `dump'
        from (irb):11
        from :0


-Steve

On Jan 28, 1:23 am, Pat Allan <[email protected]> wrote:
> Hi Steve
>
> The reason I add this on when I get search results back, is because 
> sphinx_attributes is useless at any other point, and I don't like the idea of 
> modifying *all* objects for something that only has use in a single situation.
>
> Still, maybe it's worth it - it would make the code cleaner, and probably 
> speed up things when search results are populated. I would be interested in 
> trying to figure out why memcache doesn't like it - don't suppose you've 
> found out any of the finer details?
>
> Cheers
>
> --
> Pat
>
> On 28/01/2010, at 4:31 AM, Steve H wrote:
>
>
>
> > So... we rely on memcache heavily throughout our site, as I'm sure
> > many other developers do as well.
>
> > Adding the sphinx_attributes as a singleton method on the specific
> > object that is pulled back from the search causes memcache to break.
>
> > Frankly, my preferred solution is for the thinking_sphinx gem to re-
> > open ActiveRecord (or at least re-open the indexed classes) and add an
> > attr_accessor :sphinx_attributes
>
> > Currently what we're doing is taking some of the stuff out of
> > sphinx_attributes and putting it into a custom search_results object
> > (legacy stuff), then looking our object up again by id.
>
> > I think the fix I'm going to do (for now) is to remove the
> > sphinx_attributes method from the object once we're done initializing
> > our custom search_results object.  But ideally, this wouldn't be
> > necessary...
>
> > -Steve
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Thinking Sphinx" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/thinking-sphinx?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en.

Reply via email to