1

使用 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 。

谢谢!

4

0 回答 0