Frage

Ich habe diese Klasse, die Antwort von „Resque“ ausgeführt werden sollte auszuführen, habe ich einen Fehler Weichen an dieser Linie recipient.response = response.body ist undefined method response=' for #<Hash:0x00000003969da0> denke ich, dass, weil die Arbeiter und Active nicht zusammenarbeiten können. P. S Ich lud bereits meine Umgebung und diese Klasse in lib-Verzeichnis platziert

Mit: 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
War es hilfreich?

Lösung

Resque verwendet Json Serialisierung. JSON Serialisierung würde nicht zulassen, dass Sie ein Objekt mit der Methode intakt deserialisieren.

Wenn Sie eine Instanz des Empfängers haben (mit dem Namen „Empfänger“) und will, dass es in dem Verfahren verwenden, um eine Reaktion auszuführen / anhält, dann sollten Sie die ID des Empfängers einreihen und holt es aus Ihrer Persistenz-Schicht, wenn perform aufgerufen .

https://github.com/defunkt/resque (Kasse Abschnitt über die Persistenz)

ist Resque unterscheidet sich von DelayedJob / Background Job und andere auf diese Weise. (Weshalb ich mag es. Die gleiche Warteschlange kann von mehreren Rubin Implementierungen geteilt werden, jruby, mri, ...)

Andere Tipps

Das klingt nicht wie ein Problem mit resque und Activerecord überhaupt. Es sagt der Parameter recipient, dass Sie übergeben war ein Hash. Wo ist der Code, der den Job eingereiht? Sie können auch einen Blick eine die Protokollausgabe von dem Arbeiter, wo Sie die Fehlermeldung sah, um zu sehen, was die Parameter in den Job übergeben wurden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top