我有这个类响应执行由“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
答案 0 :(得分:3)
Resque使用json序列化。 JSON序列化不允许您使用完整方法反序列化对象。
如果您有一个收件人实例(名为“收件人”)并希望在方法中使用它来执行/持久化响应,那么您应该将收件人的ID排入队列并在调用perform时从持久层中获取它
https://github.com/defunkt/resque(查看有关持久性的部分)
Resque与DelayedJob / Background Job和其他方式不同。 (这就是我喜欢它的原因。同一个队列可以由多个ruby实现共享,jruby,mri,......)
答案 1 :(得分:-1)
这听起来不像是resque和activerecord的问题。它说你传入的参数recipient
是一个哈希。排队工作的代码在哪里?您还可以查看工作人员的日志输出,其中您看到了该错误消息,以查看传递给作业的参数是什么。