使用DelayedJob时出现strage序列化错误。假设我有以下ActiveRecord类用户:
class User < ActiveRecord::Base
serialize :metadata, UserMetaData
end
UserMetaData看起来像这样:
class UserMetaData < Hash
def some_function
#do work
end
end
如果我的DelayedJob在内部执行此操作:
class MyJob
attr_accessor :user_id
def initialize(user_id)
self.user_id = user_id
end
def perform
@user = User.find(self.user_id)
end
end
每当我运行它时,我在本地得到以下错误:
[Worker(host:home pid:87197)] MyJob failed with ActiveRecord::SerializationTypeMismatch: Attribute was supposed to be a UserMetaData, but was a Hash - 2 failed attempts
它在DelayedJob系统之外工作正常。看来,无论何时从数据库中获取记录,它都不会正确地反序列化它。我注意到如果我将User类更改为:
serialize :metadata, Hash
它工作正常,但是作为DelayedJob中的Hash和DelayedJob系统之外的UserMetaData出现。这里的问题是当我在DelayedJob系统中时,我不能在UserMetaData类上使用函数(即:@ user.metadata.some_function)。不太确定该怎么做。任何指针都会非常有用。
更新:Github上似乎还有与此问题相关的开放票证:https://github.com/collectiveidea/delayed_job/issues/300。
谢谢!