我有这个课程的响应,要通过“ Resque”运行,我在这条线上有一个错误 recipient.response = response.bodyundefined method response=' for #<Hash:0x00000003969da0> 我认为这是因为工人和Activerecord无法共同努力。 PS我已经加载了环境,这堂课放在lib目录中

使用:Ruby 1.9.2 Rails 3 Resque 1.10.0

class Msg
  def self.perform(message,sender,host, path, recipient)
    message_logger ||= Logger.new("#{Rails.root}/log/message.log")
    response = Net::HTTP.get_response(host, path)
    begin
      recipient.response = response.body
      recipient.sent_at = Time.zone.now
      recipient.save
      # Logging
      log = "Message #{
      message.sent_at}\n\tRespone:\n\t\tBody: #{response.body}\n\t\tCode: #{response.code}\n"
      message_logger.info(log)
    rescue Exception => e
      message_logger.error(e.message + '/n' + e.backtrace.inspect)
    end
  end
end
有帮助吗?

解决方案

Resque使用JSON序列化。 JSON序列化不允许您使用该方法完整地对象进行对象。

如果您有一个收件人的实例(名为“收件人”),并希望在方法中使用它来执行/持久响应,则应在调用执行时从持久性层中获取接收者的ID并从持久性层中获取。

https://github.com/defunkt/resque (签约有关持久性的部分)

Resque不同于延迟Job/背景作业,其他方式不同。 (这就是为什么我喜欢它。多个Ruby实现,Jruby,MRI,...)可以共享相同的队列。

其他提示

这听起来根本不是Resque和Activerecord的问题。它说参数 recipient 您经过的是哈希。加入工作的代码在哪里?您还可以从工人中查看日志输出,您可以在其中看到该错误消息,以查看传递到作业的参数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top