1

「Resque」によって実行される応答を実行するこのクラスがあります。この行recipient.response = response.bodyに次のエラーがあります。

undefined method response=' for #Hash:0x00000003969da0

WorkerとActiveRecordが連携できないからだと思います。
PS私はすでに環境をロードしており、このクラスは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
4

2 に答える 2

3

Resque は json シリアライゼーションを使用します。JSON シリアライゼーションでは、メソッドをそのままにしてオブジェクトをデシリアライズすることはできません。

Recipient (「recipient」という名前) のインスタンスがあり、それをメソッドで使用して応答を実行/永続化する場合は、受信者の ID をキューに入れ、実行が呼び出されたときに永続化レイヤーからフェッチする必要があります。

https://github.com/defunkt/resque (永続性に関するセクションをチェックしてください)

Resque は DelayedJob/Background Job などとはこのように異なります。(これが私が気に入っている理由です。同じキューを複数の Ruby 実装、jruby、mri などで共有できます。)

于 2010-12-20T17:13:17.393 に答える
-1

resque と activerecord ではまったく問題ないように思えます。渡したパラメーターrecipientはハッシュであることがわかります。ジョブをエンキューしたコードはどこにありますか? エラーメッセージが表示されたワーカーからのログ出力を見て、ジョブに渡されたパラメーターを確認することもできます。

于 2010-10-22T08:19:39.423 に答える