使用 DelayedJob 时出现意外序列化错误。假设我有以下 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 中的哈希和 DelayedJob 系统之外的 UserMetaData 出现。这里的问题是当我在 DelayedJob 系统中时,我无法使用 UserMetaData 类上的函数(即:@user.metadata.some_function)。不太清楚该怎么做。任何指针都会非常有帮助。
更新:Github 上似乎也有一张与此问题相关的公开票:https ://github.com/collectiveidea/delayed_job/issues/300 。
谢谢!