【问题标题】:sidekiq_mailer error when trying to send email尝试发送电子邮件时出现 sidekiq_mailer 错误
【发布时间】:2014-05-22 00:45:18
【问题描述】:

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

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

有人知道为什么会这样吗?

【问题讨论】:

    标签: ruby-on-rails ruby json sidekiq


    【解决方案1】:

    根据this comment on a resque issue,我能够解决一个类似的问题,即我试图将整个对象传递给工作人员的perform 操作,而不仅仅是对象ID。我重构了我的代码,只传递一个 id 并在 worker 内部获取必要的对象。

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多