Rails 4 ライブストリームは Puma では機能しません
概要
Pumaサーバーを使用してRails ActiveController::Liveに小さなテストを実装しようとしています。 Rails s puma で Puma サーバーを起動し、curl localhost:3000/messages/events を使用してテストを行いました。ただし、データが一斉に返されるまでに長い待ち時間があり、これは WEBrick を使用した場合と同じでした。では、なぜ Puma サーバーは結果をライブ ストリーミングしないのでしょうか?
class MessagesController < ApplicationController
include ActionController::Live
def index
@messages = Message.all
end
def create
@message = Message.create!(params[:message].permit(:content, :name))
end
def events
3.times do |n|
response.stream.write "#{n}...\n\n"
sleep 2
end
ensure
response.stream.close
end
end
解決策
応答ヘッダーを設定する必要があります
def events
response.headers['Content-Type'] = 'text/event-stream'
3.times do |n|
response.stream.write "#{n}...\n\n"
sleep 2
end
ensure
response.stream.close
end