2

我在我的应用程序中添加了 gems sidekiq(2.15.0) 和sidekiq_mailer(0.0.6)。当我尝试发送电子邮件时,我收到:

NoMethodError (undefined method `key?' for #<JSON::Ext::Generator::State:0x007f1b......

有谁知道为什么会这样?

4

1 回答 1

8

根据这个关于 resque 问题的评论,我能够解决一个类似的问题,即我试图将整个对象传递给工作人员的perform操作,而不仅仅是对象 ID。我重构了我的代码以仅传递一个 id 并在工作人员自己内部获取必要的对象。

更深层次的问题是 sidekiq 仅支持原生 JSON 类型,因此在尝试将对象传递给 sidekiq 时,它会抛出任何更复杂的对象,例如 ruby​​ 对象。有关更多详细信息和文档,请参阅此线程:

传递给 perform_async 的参数必须由简单的 JSON 数据类型组成:string、integer、float、boolean、null、array 和 hash。Sidekiq 客户端 API 使用 JSON.dump 将数据发送到 Redis。Sidekiq 服务器从 Redis 中提取 JSON 数据并使用 JSON.load 将数据转换回 Ruby 类型以传递给您的 perform 方法。不要传递符号或复杂的 Ruby 对象(如日期或时间!),因为它们无法正确地在转储/加载往返过程中幸存下来。

于 2014-05-20T22:42:20.893 回答