tobi / delayed_job

Database backed asynchronous priority queue -- Extracted from Shopify
http://tobi.github.com/delayed_job
MIT License
2.15k stars 1.25k forks source link

Loading associations doesn't work if class hasn't been loaded #27

Open ctaintor opened 14 years ago

ctaintor commented 14 years ago

I ran into this problem, and, it's not a DJ problem but a YAML and Rails problem. However, since DJ makes use of YAML serializing, it is probably wise to have something like this included in DJ.

#Taken from http://blog.sbf5.com/?p=39
#Basically, when an object is deserialized and the class that was serialized
#doesn't exist, then you get back a YAML object, rather than the object you
#wanted.  The fix below will use Rails' autoloading to load the class if it's
#not already there.
YAML::Syck::Resolver.class_eval do
  def transfer_with_autoload(type, val)
    match = type.match(/object:(\w+(?:::\w+)*)/)
    match && match[1].constantize
    transfer_without_autoload(type, val)
  end
  alias_method_chain :transfer, :autoload
end