在同一应用程序中使用 identity_cache (v 0.0.4) 和 delayed_job (v 3.0.3) 时,我收到错误“#<Hash:0x007f9836dfdab0> 的未定义方法 `tag='”。
我跟踪了堆栈跟踪,发现delayed_job 覆盖了ActiveRecord::Base#encode_with。在delayed_job 版本中,它调用
coder.tag = ['!ruby/ActiveRecord', self.class.name].join(':')
似乎 ActiveRecord::Base 期望 coder 是一个 Hash,而 delay_job 假设它是一个 Psych::Coder,它确实有一个 tag= 方法。
最后,identity_cache 确实调用了 encode_with,并传递了一个 Hash。因此错误。
我正在使用 ruby 1.9.3p429,它包含 psych 作为标准库。我没有在任何地方指定 yaml 解析器引擎,当我检查时它总是返回 psych(有些人抱怨过类似的问题,但他们使用 syck 进行 yaml 解析)。
所以,我想问题是,我如何让 delay_job 与 identity_cache 配合得很好?