我在我的应用中添加了宝石sidekiq
(2.15.0)和sidekiq_mailer
(0.0.6)。当我尝试发送电子邮件时,我会收到:
NoMethodError (undefined method `key?' for #<JSON::Ext::Generator::State:0x007f1b......
有人知道为什么会这样吗?
答案 0 :(得分:8)
Per this comment on a resque issue我能够解决类似的问题,我试图将整个对象传递给工作人员的perform
操作而不仅仅是对象ID。我重构了我的代码以传递一个id并在worker中自己获取必要的对象。
更深层次的问题是sidekiq只支持本机JSON类型,因此在尝试将对象传递给sidekiq时,它会抛出任何更复杂的东西,例如ruby对象。有关详细信息,请参阅this thread:
传递给perform_async的参数必须由简单的JSON数据类型组成:string,integer,float,boolean,null,array和hash。 Sidekiq客户端API使用JSON.dump将数据发送到Redis。 Sidekiq服务器从Redis中提取JSON数据并使用JSON.load将数据转换回Ruby类型以传递给您的perform方法。不要传递符号或复杂的Ruby对象(比如日期或时间!),因为这些对象无法正常转储/加载往返。