質問

「Resque」によって実行されるために実行するための応答があるこのクラスがあります、私はこの行にエラーがあります recipient.response = response.body wichです undefined method response=' for #<Hash:0x00000003969da0> 労働者と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
役に立ちましたか?

解決

ResqueはJSONシリアル化を使用します。 JSONのシリアル化により、メソッドを使用してオブジェクトを無傷の脱毛することはできません。

受信者のインスタンス(「レシピエント」)のインスタンスがあり、メソッドでそれを使用して応答を実行/永続化する場合は、受信者のIDをencueし、実行すると永続レイヤーからそれを取得する必要があります。

https://github.com/defunkt/resque (永続性に関するセクションをチェックアウト)

この方法では、Resqueはdelayedjob/バックグラウンドジョブなどとは異なります。 (それが私がそれが好きな理由です。同じキューは、複数のRubyの実装、Jruby、MRI、...で共有できます。)

他のヒント

それは、ResqueとActivereCordの問題のようには聞こえません。パラメーターと書かれています recipient あなたが渡したのはハッシュでした。ジョブをenquedしたコードはどこにありますか?また、ワーカーからのログ出力を見ることもできます。そこでは、そのエラーメッセージを見て、ジョブに渡されたパラメーターが何であるかを確認することもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top