1

Rails 3.2 で大きなデータを JSON としてストリーミングしようとしています。Rails の既定のストリーミングはパーシャルに対してのみ機能するため、JSON をテキストとして生成することにしました。他の投稿で示唆されているように、私は各メソッドで Stream クラスを作成し、すべてのオブジェクトに対して「yield」を行いました。

Unicorn サーバーは 3 分間応答を送信せず、その後すべてのデータを送り返します。

  • Unicorn サーバーでストリーミングは機能しますか?

  • 出力を強制的にフラッシュするにはどうすればよいですか?

このサーバーは ELB の背後でホストされており、リクエストは 60 秒後にタイムアウトします。

コントローラーの方法

def listings
   self.response_body = Stream.new Listing
end

ストリーム クラス

class Stream
  def initialize collection
    @collection = collection
  end

  def each
    size = @collection.count
    index = 0
    yield "["
    @collection.find_each do |obj|
       yield (size - 1 == index) ? obj.to_json : "#{obj.to_json},"
       index += 1
    end
    yield "]"
  end
end
4

0 に答える 0