2010-10-18 57 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是一個散列。代碼將哪個隊列排隊?您還可以查看從您看到該錯誤消息的工作人員的日誌輸出,以查看傳遞給作業的參數。