Проблема с использованием Resque, Rails 3 и Active-Recored - PullRequest
1 голос
/ 18 октября 2010

У меня есть этот класс, ответ на который должен выполнить «Resque», у меня ошибка в этой строке recipient.response = response.body, которая undefined method response=' for #<Hash:0x00000003969da0>, я думаю, потому что работник и ActiveRecord не могут работать вместе. P.S Я уже загрузил свое окружение, и этот класс помещен в каталог lib

Использование: Ruby 1.9.2 Рельсы 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 ]

3 голосов
/ 20 декабря 2010

Resque использует сериализацию JSON. Сериализация JSON не позволит вам десериализовать объект с целым методом.

Если у вас есть экземпляр Recipient (по имени «получатель») и вы хотите использовать его в методе для выполнения / сохранения ответа, тогда вы должны поставить в очередь идентификатор получателя и извлечь его с вашего уровня персистентности при вызове execute .

https://github.com/defunkt/resque (оформление заказа на стойкость)

Resque отличается от DelayedJob / Background Job и других тем. (вот почему мне это нравится. Одну и ту же очередь могут использовать несколько реализаций ruby, jruby, mri, ...)

0 голосов
/ 22 октября 2010

Это совсем не похоже на проблему с resque и activerecord.Он говорит, что параметр recipient, который вы передали, был хэшем.Где код, который ставил в очередь работу?Вы также можете просмотреть выходные данные журнала от рабочего, где вы видели это сообщение об ошибке, чтобы увидеть, какие параметры были переданы в задание.

...