使用Resque,Rails 3和Active-Recored的问题

时间:2010-10-18 12:34:50

标签: ruby-on-rails activerecord ruby-on-rails-3 ruby-1.9 resque

我有这个类响应执行由“Resque”运行,我有一个错误 在recipient.response = response.body这一行是undefined method response=' for #<Hash:0x00000003969da0>我认为因为工人和ActiveRecord不能一起工作。 P.S我已经加载了我的环境,这个类放在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

2 个答案:

答案 0 :(得分:3)

Resque使用json序列化。 JSON序列化不允许您使用完整方法反序列化对象。

如果您有一个收件人实例(名为“收件人”)并希望在方法中使用它来执行/持久化响应,那么您应该将收件人的ID排入队列并在调用perform时从持久层中获取它

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

Resque与DelayedJob / Background Job和其他方式不同。 (这就是我喜欢它的原因。同一个队列可以由多个ruby实现共享,jruby,mri,......)

答案 1 :(得分:-1)

这听起来不像是resque和activerecord的问题。它说你传入的参数recipient是一个哈希。排队工作的代码在哪里?您还可以查看工作人员的日志输出,其中您看到了该错误消息,以查看传递给作业的参数是什么。