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