2010-10-18 58 views
1

我有这样的类来执行,其响应于由“Resque”下运行,我在这条线的误差 recipient.response = response.body至极是undefined method response=' for #<Hash:0x00000003969da0>我认为,因为工人和ActiveRecord的能一起工作。 PS我已经载入我的环境,这个类放在lib目录问题使用Resque,Rails的3和有源条记录

使用: 的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 

回答

3

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

如果您有一个Recipient实例(名为“recipient”),并且希望在方法中使用它来执行/保持响应,那么您应该排队收件人的id并在执行操作时从持久层获取它调用。

https://github.com/defunkt/resque(结帐上的持久性的部分)

Resque以这种方式从DelayedJob /后台作业不同等。 (这就是我喜欢它的原因,同一个队列可以被多个ruby实现共享,jruby,mri,...)

-1

这听起来像resque问题并积极记录。它说你传入的参数recipient是一个散列。代码将哪个队列排队?您还可以查看从您看到该错误消息的工作人员的日志输出,以查看传递给作业的参数。